2017-03-03 110 views
2

我想在Object.create中使用属性对象参数,mdn说你传入一个对象,但是当我传入一个对象时,我得到一个错误告诉我要传递一个对象,我很困惑以我在做什么错为什么不是这个简单的继承工作?

let mammal={hasFur:true} 

let dog=Object.create(mammal,{legs:4});//returns Uncaught TypeError: Property description must be an object: true at Function.create (<anonymous>) 

回答

3

你形容legs44不是一个对象。

the MDN documentation它包括各种各样的东西,你可以指定有例子:

o = Object.create(Object.prototype, { 
    // foo is a regular 'value property' 
    foo: { 
    writable: true, 
    configurable: true, 
    value: 'hello' 
    }, 

在这个例子中,我们使用foo,而不是legs。一个对象的值,其中包含一个value属性,其中包含foo的默认值。

2

在一个简单的定义中,Object.create(proto[, propertiesObject])是定义对象属性的摘要或定义对象属性的规范的一种方式。它的工作原理与其他一些语言中的abstract classes类似,&不是specific object

它并不一定为正在创建的对象的道具提供默认值。 您只提供了一个文字(4),这显然不是能够描述属性规范的对象。我们将在这里看到,它自己的4个(甚至不一定)只是腿的属性对象的一部分。

现在。考虑到这一点,我们尝试使用Object.create()来创建dog对象。在这里,我们去:

  • 要求:我们希望我们的狗有一个名为legs属性。我们需要legs枚举对象时可枚举。我们不想让别人用赋值运算符来改变它。 &我们也希望默认为4
  • 实施:现在,我们已经决定legs财产的规范,我们需要一个Property Descriptor来定义它[的Object.defineProperties(obj, props)第二个参数]

的。上述props是第二{&}可选在Object.create(proto[, propertiesObject]) &参数具有用于描述对象的特性一些键:

props {configurable, enumerable, value, writable, get, set} 

允许代码dog对象:

let dog=Object.create(mammal,{ 
         legs:{ 
          enumerable : true, 
          writable : false, 
          value : 4 } 
        }); 

更多的澄清,读取二者上面链接的参考文献,是高度有益的。

相关问题