【发布时间】:2016-09-12 09:15:37
【问题描述】:
我知道设置 Javascript 属性属性的正确方法是使用 Object.defineProperty 函数,但我很好奇是什么阻止了直接在通过 Object.getOwnPropertyDescriptor 返回的描述符对象上设置这些值。
var a = new Object()
a.x = 1
var attributes = Object.getOwnPropertyDescriptor(a, 'x') //Object {value: 1, writable: true, enumerable: true, configurable: true}
var attributesOfWritable = Object.getOwnPropertyDescriptor(attributes, 'writable') //Object {value: true, writable: true, enumerable: true, configurable: true}
Object.getOwnPropertyDescriptor(a, 'x').writable = false
console.log(Object.getOwnPropertyDescriptor(a, 'x')) //Object {value: 1, writable: true, enumerable: true, configurable: true}
Object.defineProperty(a, 'x', {writable: false})
console.log(Object.getOwnPropertyDescriptor(a, 'x')) //Object {value: 1, writable: false, enumerable: true, configurable: true}
如上代码所示,当查看为ax的原始描述符对象上的'writable'属性返回的描述符对象时,该属性是可写可配置的,即设置属性描述符的writable属性没有改变底层的x 属性。
所以我不确定为什么我不能只写:
Object.getOwnPropertyDescriptor(a, 'x').writable = false
【问题讨论】:
标签: javascript