javascript中的Object.create方法



作为javascript的初学者,我试图从这里理解Object.create()方法

https://developer-new.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

在示例代码的第18行。在可写设置为true的情况下创建访问器属性。我还读到,可写仅用于数据描述符。

尝试运行,

var o = Object.create(Object.prototype, {
  // foo is a regular "value property"
  foo: { 
    writable:true, configurable:true, value: "hello" 
  },
  // bar is a getter-and-setter (accessor) property
  bar: {
    writable: true,
    configurable: false,
    get: function() { return 10 },
    set: function(value) { console.log("Setting `o.bar` to", value) }
  }
  });
console.log(o); 

我得到invalid property error

问题是writableset/get互斥。代码在Chrome中生成了这个有用的错误:

Invalid property. A property cannot both have accessors and be writable...

这在逻辑上是有道理的:如果在属性上有set/get访问器,则该属性永远不会被写入和/或从中读取,因为任何读取/写入该属性的尝试都将被访问器函数截获。如果您将一个属性定义为writable,并且赋予它访问器函数,则同时表示:

  1. "此属性的值可以直接更改,"以及
  2. 阻止所有读取和/或写入此属性的尝试;请使用这些函数

错误只是阻止您指定矛盾。我认为,从您编写getter和setter的事实来看,您并不真的希望该属性为writable。只要去掉那一行,代码就能完美运行。

答案很晚,不是在寻找选票,但希望这会有所帮助。

有两种性质。每个属性都是其中之一:

  1. 具有以下四个属性的数据属性

    • 价值
    • 可写的
    • 可枚举的
    • 可配置的
  2. 或具有以下四个属性的访问器属性

    • 得到
    • 集合
    • 可枚举的
    • 可配置的

因此,不存在同时具有getwritable的属性。JavaScript就是这样!请参阅ECMAScript标准的第8.6节了解血腥的细节。

相关内容

  • 没有找到相关文章

最新更新