我有点迷茫和/或太天真了。我想用一个原型对象创建一个对象,该对象包含一个函数,该函数将一个值添加到作为属性创建的列表中。
但是似乎Object.create忽略了属性的创建。至少,我就是这么做的。
我没有得到什么?
这是一个例子:
const proto = {
add(s) {
this.list.push(s);
}
}
const props = {
list: []
}
const newObj = Object.create(proto, props);
console.log('newObj', newObj);
// What happendened to the list property?
newObj.add('test');
// due to undefined list-Property
// an error is being thrown
答案 0 :(得分:2)
问题在于properties
对象必须以特定方式设置格式。看到这里:
这些属性对应于Object.defineProperties()的第二个参数。
您可以这样做:
const props = {
list: {
value: []
}
}
这是定义属性的最明确的方法,并且有一些interesting effects。但是除非您需要如此笨拙,否则我建议您这样做:
newObj.list = []
答案 1 :(得分:0)
来自MDN
propertiesObject
可选。如果指定且未定义,则其可枚举的自身属性(即,在其自身上定义的那些属性,而不是其原型链上不可枚举的属性)的对象会指定要添加到新创建的对象的属性描述符,以及相应的属性名称。这些属性对应于Object.defineProperties()的第二个参数。
Object.defineProperties
的参数形式为:
{
propName: {
get: function() {},
set: function() {},
value: Any
writable: true,
enumerable: true,
configurable: true,
}
}
请注意,您可以让 一个getter / setter 或一个值。