前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Javascript对象

Javascript对象

作者头像
epoos
发布2022-06-06 15:32:03
3790
发布2022-06-06 15:32:03
举报
文章被收录于专栏:epoos.com

《JavaScript高级程序设计学习笔记》之Javascript对象。 面向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念 而通过类可以创建任意多个具有相同属性和方法的对象。 ECMAScript没有类的概念,因此它的对象也与机遇类的语言中的对象有所不同 ES6新增了对象Class的语法糖,这里不讨论ES6

理解对象

1.对象

代码语言:javascript
复制
var person = new Object();

person.name = "jack";

person.sayName = function(){  
  return this.name;
}

2.属性

ECMAScript中有两种属性

1)数据属性,数据属性有4个描述其行为的特性

代码语言:javascript
复制
[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性改为访问器属性。

[[Enumerable]]:能否通过for-in遍历

[[Writabe]]:是否能修改属性的值

[[value]]:包含这个属性的数据值。从这个位置读属性值,写属性值的时候把新的值保存在这个位置。默认为undefined

要修改属性的默认特性必须使用ECMAScript5的Object.defineProperty()方法。

代码语言:javascript
复制
var person = {};

Object.defineProperty(person, "name", {  
  configurable:true, //设置false之后下次用defineProperty修改此属性就会抛错  
  value: jack
});

2)访问器属性

访问器属性不包含数据值;它们包含一对getter和setter函数;

读取访问器属性的时候会调用getter函数;写入访问器属性的时候会调用setter函数

访问器属性有如下4个特性

代码语言:javascript
复制
[[Configurable]]:同上数据属性

[[Enumerable]]:同上数据属性

[[Get]]:在读取属性的时候调用的函数。默认undefined

[[Set]]:在写入属性的时候调用的函数。默认为undefined
  1. 访问器属性不能直接定义,必须使用Object.defineProperty()来定义
代码语言:javascript
复制
var book = {
  __year:2016,
  edition:1	
};

Object.defineProperty(book, "year", {
  get: function() {
    return this.__year;
  },
  set: function(newValue) {
    if (newValue > 2016) {
      this.__year  = newValue;
      this.edition += newValue - 2016;
    }
  }
});

book.year = 2017;
console.log(book.edition); // 2
  1. 定义多个属性

ECMAScript5定义了一个Object.defineProperties()方法。利用这个方法可以通过描述符一次定义多个属性。

代码语言:javascript
复制
var book = {};

Object.defineProperties(book, {
  __year: { //数据属性
    value:2016,
    writable:false
  },
  edition: { //数据属性
    value:1,
    writable:true
  },
  year: { //访问器属性
    get: function() {
      return this.__year;
    },
    set: function(newValue) {
      if (newValue > 2016) {
        this.__year = newValue;
        this.edition += newValue - 2016;
      }
    }
  }
});
  1. 读取属性的特性

使用ECMAScript5的Ojbect.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。

代码语言:javascript
复制
//...上面的例子

var descriptor = Object.getOwnPropertyDescriptor(book, "__year"); 
console.log(descriptor.value, descriptor.writable, descriptor.configurable, descriptor.value);

Object 排序


创建对象

1.工厂模式

2.构造函数模式

3.原型模式

4.组合使用构造函数模式和原型模式

5.动态原型模式

6.寄生构造函数模式

7.稳妥构造函数模式


继承

许多OO语言都支持两种继承方式:

代码语言:javascript
复制
接口继承:继承方法签名

实现继承:继承实际方法

JavaScript支持实现继承,且继承方式是依靠原型链实现的(es6的class类已经支持继承)

1.原型链继承

2.借用构造函数实现继承

3.组合继承

4.原型式继承

5.寄生继承

6.寄生组合式继承

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 理解对象
  • 创建对象
  • 继承
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档