猿问

以下两种方法有什么不同

var a={};

Object.defineProperty(a,"z",{value:10});

var obj=new Object(a);

Object.defineProperty(obj,"z",{value:100});//报Uncaught TypeError: Cannot redefine property: z

Object.getOwnPropertyDescriptor(obj,"z");//configurable: false enumerable: false value: 10 writable: false


var 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就不能重新设呢?

慕姐8259394
浏览 874回答 1
1回答

橋本奈奈未

那你要理解那个属性的意义就知道为什么了。configurable当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。enumerable当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false。writable当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答