繁体   English   中英

javascript中的Object.create方法

[英]Object.create method in javascript

作为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

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

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

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

  1. “这个属性的价值可以直接改变,”和
  2. “阻止所有读取和/或写入此属性的尝试;而是使用这些功能。”

错误只是阻止您指定矛盾。 我假设你写了一个getter和setter,你真的不希望该属性是writable 只需删除该行,您的代码就可以完美运行。

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

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

  1. 具有以下四个属性的data属性:

    • 枚举
    • 配置
  2. 或者具有以下四个属性的访问者属性:

    • 得到
    • 枚举
    • 配置

因此,没有任何属性可以兼具getwritable 这就是JavaScript的方式! 有关详细信息,请参阅ECMAScript标准的第8.6节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM