为什么这个简单的继承不起作用?

时间:2017-03-03 23:56:36

标签: javascript inheritance

我正在尝试使用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>)

2 个答案:

答案 0 :(得分:3)

您已将legs描述为4,而4不是对象。

请参阅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的默认值。

答案 1 :(得分:2)

在一个简单的定义中,Object.create(proto[, propertiesObject])是用于定义对象属性的抽象或定义对象属性的规范的方法。它在某些其他语言中的工作方式与abstract classes相似,并且不是specific object

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

现在。考虑到这一点,让我们尝试使用dog创建您的Object.create()对象。我们走了:

  • 要求:我们希望我们的狗拥有一个名为legs的财产。
  • 设计:枚举对象时,我们需要legs可枚举。我们不想让其他人通过赋值运算符更改它。 &安培;我们也希望默认为4。
  • 实施:既然我们已经决定了legs属性的规范,我们需要Property Descriptor来定义它。[{1的第二个参数}}]

上面提到的Object.defineProperties(obj, props)是第二个{&amp;} props&amp;中的可选}参数有一些用于描述对象属性的键:

Object.create(proto[, propertiesObject])

允许代码props {configurable, enumerable, value, writable, get, set} 对象:

dog

有关更多说明,请阅读上面链接的两个参考资料,非常有帮助。