创建对象
- 使用对象初始化器来创建对象
1 | var obj = {key_1:value_1, |
1 | var myObj = {color: red, wheels:4, engine:{cylinders: 4, size: 2.2}} |
- 使用Object.create()方法创建对象
- 语法是(属性描述符会在下面讲解):
1 | Object.create(proto, [ propertiesObject ]) |
1 | o = Object.create(Object.prototype, { |
- 混合构造函数和原型方式创建对象
1 | function Parent(){ |
对象属性的遍历
- 遍历属性
1 | var obj = {prop1: 4, prop2: 5, prop3: 6}; |
- 遍历属性值
1 | var obj = {prop1: 4, prop2: 5, prop3: 6}; |
对象常用操作
- 对象的访问
- obj.name和obj[“name”]效果一样;
- 获取key值组成的数组
1 | var arr = Object.keys(obj); |
- 删除对象或属性
1 | delete objectName; |
getter和setter
- getter和setter是对象属性的属性描述符的一种,可以在定义对象属性的时候指明;
- getter和setter用于获取或者修改对象的某个属性;
- 通过对象初始化器在创建对象的时候指明:
1 | (function () { |
- 使用 Object.create 方法指定:
1 | (function () { |
- 使用 Object.defineProperty 方法指定:
- Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性,并返回这个对象;
- 语法:
Object.defineProperty(obj, prop, descriptor)
- 参数:obj 需要定义属性的对象;prop 需被定义或修改的属性名;descriptor 需被定义或修改的属性的描述符;
1 | (function () { |
- 使用 Object.defineProperties方法指定:
- 概述:
Object.defineProperties()
方法在一个对象上添加或修改一个或者多个自有属性,并返回该对象; - 语法:
Object.defineProperties(obj, props)
- 参数:obj 将要被添加属性或修改属性的对象;props 该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置;
- 用法与 Object.defineProperty 方法类似;
- 概述:
1 | (function () { |
- 使用 Object.prototype.defineGetter以及 Object.prototype.defineSetter方法指定:
1 | (function () { |
属性描述符
- 说明:
- 对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。
- 数据描述符是一个拥有可写或不可写值的属性。
- 存取描述符是由一对 getter-setter 函数功能来描述的属性。
- 描述符必须是两种形式之一;不能同时是两者。
- 数据描述符和存取描述符均具有以下可选键值:
1 | configurable |
- 数据描述符同时具有以下可选键值:
1 | value |
- 存取描述符同时具有以下可选键值:
1 | get |
上面键值的含义:
- 数据描述符包括两个属性 : value 属性以及 writable属性,第一个属性用来声明当前欲修饰的属性的值,第二个属性用来声明当前对象是否可写即是否可以修改;
- 存取描述符就包括 get 与 set 属性用来声明欲修饰的象属性的 getter 及 setter;
- 属性描述符内部,数据描述符与存取描述符只能存在其中之一,但是不论使用哪个描述符都可以同时设置 configurable 属性以及enumerable 属性;
- configurable属性用来声明欲修饰的属性是否能够配置,仅有当其值为 true 时,被修饰的属性才有可能能够被删除,或者重新配置;
- enumerable 属性用来声明欲修饰属性是否可以被枚举,决定属性是否能被 for…in 循环或 Object.keys 方法遍历得到;
create方法为显示配置对象的属性和值,如不声明将按照属性描述符的默认值:
1 | (function () { |
- defineProperty、defineProperties方法为显示配置对象的属性和值,如不声明将按照属性描述符的默认值:
1 | (function () { |
var o = {}; o.a = 1;
这个语句却和上面不同,它的等价配置如下:
1 | (function () { |
- Enumerable属性专项研究:
- 属性特性 enumerable 决定属性是否能被 for…in 循环或 Object.keys 方法遍历得到;
1 | (function () { |
- Configurable属性专项研究:
- Configurable属性如果为false,表示对象的Configurable、Enumerable、value、writable、set、get属性一旦确定(包含默认确定的)就不能再更改,对象的这个属性也不能被删除;
1 | (function () { |