数据属性 | 访问器属性 | |
---|---|---|
共同特性 | [[enumerable]] |
|
[[configurable]] |
||
特有特性 | [[writable]] |
[[get]] |
[[value]] |
[[set]] |
|
设置单个属性方法 | Object.defineProperty(obj, prop, descriptor) |
|
设置多个属性方法 | Object.defineProperties(obj, props) |
|
读取单个属性描述符 | Object.getOwnPropertyDescriptor(obj, prop) |
|
读取对象全部属性描述符 | Object.getOwnPropertyDescriptors(obj) |
|
备注 | obj: 须要被操做的目标对象; prop: 目标对象须要定义(读取)或修改的属性的名称; descriptor: 将被定义或修改的属性的描述符; props: 该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置; |
|
[[Configurable]]
:函数
- 表示可否经过
delete
删除属性从而从新定义属性,(设置为false,表示不能从对象中删除属性(在严格模式下调用delete
会报错)),- 可否修改属性的特性,
- 可否把数据属性修改成访问器属性(或相反),
- 从
true
修改成false
是单向的,即一旦把把属性定义为不可配置的,就不能再把它变回可配置了(此时只能单向修改writable
从true
到false
)。[[Enumerable]]
: 表示可否经过for-in
循环返回属性[[Writable]]
: 表示可否修改属性的值[[Value]]
: 包含这个属性的数据值[[Get]]
: 读取属性时调用的函数,默认值为undefined
[[Set]]
: 写入属性时调用的函数,默认值为undefined
其中直接在对象上定义的属性,[[Configurable]]
,[[Enumerable]]
,[[Writable]]
默认值均为true;
经过Object.defineProperty()
方法或Object.defineProperties()
方法,若是不指定writale
,enumerable
,configurable
的值,则所有默认为 false。
Object.defineProperty(book, 'actor', { value: 'Nicholas' })
var book = {} Object.defineProperties(book,{ _year:{ writable: true, value: 2004 }, edition:{ writable: true, value: 1 }, // year为访问器属性 year:{ get: function(){ return this._year; }, set: function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } } } }); // {_year: 2004, edition: 1}
Object.getOwnPropertyDescriptor(book, '_year'); // {value: 2006, writable: true, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, 'edition'); // {value: 3, writable: true, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, 'year'); // {get: ƒ, set: ƒ, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, 'actor'); // {value: "Nicholas", writable: false, enumerable: false, configurable: false}
Object.getOwnPropertyDescriptors(book)
从上面代码Object.getOwnPropertyDescriptor()
执行结果中能够看出来, 经过Object.defineProperty()
方法或Object.defineProperties()
方法,若是不指定数据属性或访问器属性的writale
,enumerable
,configurable
的值,则所有默认为false
。