为了账号安全,请及时绑定邮箱和手机立即绑定

以下两种方法有什么不同

以下两种方法有什么不同

慕姐8259394 2017-09-05 22:52:59
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。


查看完整回答
反对 回复 2017-09-06
  • 慕姐8259394
    慕姐8259394
    这几个标签的意思我知道,只是第二种方法中var a={z:1};这个方法我们都知道它默认那几个标签都是true,而Object.defineProperty(a,"z",{value:10});标签默认为false,我先运行了var a={z:1};再运行Object.defineProperty(a,"z",{value:10});标签值为什么不会被覆盖由true变成false
  • 1 回答
  • 0 关注
  • 868 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信