javascript中的Object.create方法

时间:2012-07-27 04:45:02

标签: javascript mozilla object-create

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

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

在示例代码中,第18行。创建一个accessable属性,其writeable设置为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

2 个答案:

答案 0 :(得分:12)

问题在于writableset / get是互斥的。该代码会在Chrome中生成此有用的错误:

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

这有一定的逻辑意义:如果属性上有set / get个访问者,那么该属性永远不会被写入和/或读取,因为任何读/写尝试它将被访问者功能拦截。如果您将属性定义为writable 并且为其提供访问者功能,则您同时说:

  1. “此属性的值可以直接更改”和
  2. “阻止所有读取和/或写入此属性的尝试;而是使用这些函数。”
  3. 错误只是阻止你指定矛盾。我假设你写了一个getter和setter,你真的不希望该属性为writable。只需删除该行,您的代码就可以完美运行。

答案 1 :(得分:10)

迟到的答案,不是在寻找选票,而是希望这会有所帮助。

有两种属性。每个属性都是EITHER:

  1. 数据属性,它具有以下四个属性:

    • 可写
    • 枚举
    • 配置
  2. 访问者属性,它具有以下四个属性:

    • 获得
    • 设置
    • 枚举
    • 配置
  3. 因此,没有可兼容getwritable的属性。这就是JavaScript的方式!有关详细信息,请参阅ECMAScript Standard的第8.6节。