JS标准库之属性描述对象
概述
JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写,可遍历等等。这个内部数据结构称为“属性描述对象”。
1 2 3 4 5 6 7 8 |
{ value: 123, writable: false, enumerable: true, configurable: false, get: undefined, set: undefined } |
属性描述对象提供6个元属性:
value
:是该属性的属性值,默认为undefined
。writable
:是一个布尔值,表示该属性值(value)是否可写,默认为true
。enumerable
:是一个布尔值,表示可属性值是否可遍历,默认为true
。如果设为false
,会使得某些操作(比如for...in
循环,Object.keys()
)跳过该属性。configurable
:是一个布尔值,表示属性的可配置性,默认为true
。如果设为false
,将阻止某些操作改写属性描述对象,比如无法删除该属性,也不得改变各种元属性(value属性除外)。get
:是一个函数,表示该属性的取值函数(getter),默认为undefined
。set
:是一个函数,表示该属性的存值函数(setter),默认为undefined
。
Object.getOwnPropertyDescriptor()
可以获取属性描述对象。第一个参数是目标对象,第二个参数是一个字符串,对应目标对象的某个属性名。
1 |
var obj = { p: 'a' } |
上面代码中,Object.getOwnPropertyDescriptor()
方法获取obj.p
的属性描述对象。
注意,Object.getOwnPropertyDescriptor()
方法只能用于对象自身的属性,不能用于继承的属性。
Object.getOwnPropertyNames()
返回一个数组,成员是参数对象自身的全部属性的属性名,不管该属性是否可遍历。