Object.defineProperty 可以给对象定义属性,以及属性的描述。
基本使用方法
1 | var person = { name: "Allen" }; |
configurable设置属性描述是否可修改。如果为 false,将无法对configurableenumerablewritable的值进行修改。有一点例外: 当writable为 true 时,可以将其改为 false。enumerable设置属性是否会在枚举的过程中出现。for..inObject.keysObject.valuesObject.entries只会枚举属性描述enumerable为 true 的属性。其中for..in会将原型链上所有可枚举属性都遍历一遍。writable设置属性是否可写。以上面的person对象为例,其中的_birthday属性是不可写的,假如你对它赋值(person._birthday = new Date('2019-03-03'))会没有效果,如果在严格模式下还会抛出异常。value设置属性的值。get读取属性的值。以上面person对象为例,当使用者要获取age的值时(person.age),获取的值就是get方法返回的值。set写入属性的值。如果只有get没有set那么这个属性是不可写的。
注意 writable value是一对,get方法 set方法是一对。有 value 就没有 get set。
获取一个属性的描述
如果我们想知道一个属性描述可以使用 Object.getOwnPropertyDescriptor。
1 | Object.getOwnPropertyDescriptor(person, "age"); |