理解Object.defineProperty方法
语法
Object.defineProperty(obj, prop, descriptor)
- obj:需要定义属性的对象
- prop:需要定义的属性
- descriptor [dɪˈskrɪptə®] :属性的描述描述符
- 返回值:返回此对象
descriptor [dɪˈskrɪptə®] 描述符
在JS中对象具有两种属性,分别是数据属性和访问器属性,所以其描述符也根据属性分类,分为数据描述符和访问器描述符。
在使用描述符时,必须是两种形式之一,且两者不能同时使用。
数据描述符
数据描述符是一个具有值的属性,该值可能是可写的,也可能是不可写的。
它具有以下可选的键值:
configurable:表示该属性能否通过delete删除,能否修改属性的特性或者能否修改访问器属性,默认为false。当且仅当该属性的configurable为true时,才能实现上述行为。
enumerable /ɪˈnjuːm(ə)rəb(ə)l/ :表示该属性是否可以枚举,即可否通过for..in访问属性。默认为false。
value:表示该属性的值。可以是任何有效的JS值。默认为undefined。
writable [ˈraɪtəbl]:表示该属性的值是否可写,默认为false。当且仅当属性的writable为true时,其值才能被赋值运算符改变。
访问器描述符
访问器描述符是一个有getter-setter函数对描述的属性的读写。
// 它具有以下可选的键值:
configurable:表示该属性能否通过delete删除,能否修改属性的特性或者能否修改访问器属性,默认为false。当且仅当该属性的configurable为true时,才能实现上述行为。
enumerable /ɪˈnjuːm(ə)rəb(ə)l/ :表示该属性是否可以枚举,即可否通过for..in访问属性。默认为false。
get:在读取属性时调用的函数,默认值为undefined。
set:在写入属性时调用的函数,默认值为undefined
数据描述符和访问器描述符不能同时使用,否则会报错。
get set
Get:指读取属性时调用的函数。
Set:指写入属性时调用的函数。
get或set不是必须成对出现,任写其一就可以。如果不设置方法,则get和set的默认值为undefined