属性分为两类:数据属性和访问器属性
一、数据属性
特性:[[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]];
修改方法Object.defineProperty(‘对象名’,'属性名','描述符对象');也可以通过此方法为对象添加属性,但是添加时如果不指定Configurable、Enumerable、Writable的值,它们的值默认都为false。兼容ie9及以上。
二、访问器属性
特性:[[Configurable]]、[[Enumerable]]、[[Get]]、[[Set]];
访问器属性不能直接定义,只能使用Object.defineProperty()来定义,访问器属性可以在Set函数中做很多处理操作,例如修改其他属性的值,定义时如果get或set没有定义,会导致无法进行读出或者写入操作,且严格模式下都会抛错。在一些低版本浏览器中,有_defineGetter_()和_defineSetter_()用来创建访问器属性。
同时定义多个属性,包括数据属性和访问器属性,Object.defineProperties();具体可见高程(第3版)142页;
三、读取属性的特性
Object.getOwnPropertyDescriptor('对象名','属性名');