我正在尝试使用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>)
答案 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
有关更多说明,请阅读上面链接的两个参考资料,非常有帮助。