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