ECMAScript中有两种属性:数据属性和访问器属性
ECMA-262第5版定义只有内部才用的特性(attribute),它们用于描述属性(property)的各种特征
1. 数据属性
数据属性包含一个数据值的位置,在这个位置可以读取和写入值。
数据属性有4个描述其行为的特性:
①[[Configurable]] 表示能否配置对应属性,包括能否删除、修改属性,能否把属性修改为访问器属性
②[[Enumerable]] 表示能否通过for-in循环返回属性
③[[Writable]] 表示能否修改属性的值
④[[Value]] 包含这个属性的数据值
对于直接在对象上定义的属性,[[Configurable]]、[[Enumerable]]和[[Writable]]特性都被设置为true,而[[Value]]特性被设置为指定的值
2. 访问器属性
访问器属性不包含数据值
它们包含一对getter和setter函数,用于读取和写入对象中的属性值
访问器属性也有4个描述其行为的特性:
①[[Configurable]] 表示能否配置对应属性,包括能否删除、修改属性,能否把属性修改为访问器属性
②[[Enumerable]] 表示能否通过for-in循环返回属性
③[[Get]] 在读取属性时调用的函数
④[[Set]] 在写入属性时调用的函数
访问器属性不能直接定义,必须使用Object.defineProperty()或者Object.defineProperties()来定义3,设置属性特性
通过ECMAScript5的Object.defineProperty()和Object.defineProperties()可以修改属性特性
Object.defineProperty(属性所在对象,属性的名字,描述符对象); 这个方法只能一次修改一个属性
Object.defineProperties(属性所在对象,描述符对象集合对象); 可以一次修改多个属性
4,读取属性的特性
Object.getOwnPropertyDescriptor(属性所在对象,要读取的属性名称);