2
我知道设置Javascript属性属性的正确方法是使用Object.defineProperty函数,但我很好奇什么能够防止这些值直接在描述符对象上设置通过Object.getOwnPropertyDescriptor返回。直接设置Javascript属性属性而不是Object.defineProperty
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}
如在上面的代码中所示,在看该描述符用于斧原始描述符对象上的“可写”属性对象返回的情况下,属性是可写的和可配置的,这意味着设置的所述writable
属性属性描述符没有改变底层的x
属性。
所以我不确定为什么我不能只是写:
Object.getOwnPropertyDescriptor(a, 'x').writable = false