var a={};Object.defineProperty(a,"z",{value:10});var obj=new Object(a);Object.defineProperty(obj,"z",{value:100});//报Uncaught TypeError: Cannot redefine property: zObject.getOwnPropertyDescriptor(obj,"z");//configurable: false enumerable: false value: 10 writable: falsevar a={z:1}; Object.defineProperty(a,"z",{value:10}); var obj=new Object(a); Object.defineProperty(obj,"z",{value:100}); Object.getOwnPropertyDescriptor(obj,"z");//configurable: true enumerable: true value: 100 writable: true为什么第一种写法会报Uncaught TypeError: Cannot redefine property: z这个故障,是因为第一种情况下z属性的几个标签都为false的原因吗?如果是,为什么为false就不能重新设呢?
1 回答
橋本奈奈未
TA贡献436条经验 获得超108个赞
那你要理解那个属性的意义就知道为什么了。
configurable
当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。
enumerable
当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false。
writable
当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false。
添加回答
举报
0/150
提交
取消