Object.keys(Object.create({a:1}))
[]
我期待结果为["a"]
。如何使用Object.prototype / Object.create来确保生成的对象具有预期的键?
答案 0 :(得分:1)
您正确使用Object.create
但请注意,此方法使用指定的原型对象创建一个新对象(因此在yopur case a
属性设置在返回的对象原型上而不是对象本身)并且Object.keys
仅返回自己的对象属性(不考虑原型上设置的属性)。
您还可以在propertiesObject
中使用其他Object.assign
作为第二个参数,并且此对象的属性将直接在返回的对象上设置。例如:
var o = Object.create({a: 'test'}, {b: {value: 'lorem', enumerable: true}})
上面代码a
中的属性在o
对象原型上定义,而b
道具直接在其上定义,因此Object.keys(o)
将返回['b']
。
在你的情况下你可以使用这样的东西(空对象作为第一个参数):
Object.create({}, {b: {value: 'lorem', enumerable: true}});
但是因为你可以在不使用Object.assign
的情况下使用对象文字,所以它并不存在:
Object.keys({a:1})
正如@AJP所说: Object.create实际上仅对定义getter / setter,原型继承等的更高级用例有用。
答案 1 :(得分:1)
那是因为Object.keys()
中的内容是继承{a:1}
的对象
所以a
不是该对象的自有属性,因此键将返回一个空数组
答案 2 :(得分:0)
您应该传递一个空对象{}
作为第一个参数,作为原型,然后传递一个对象数组,这些属性将被复制到结果对象中。
此外,每个属性都必须(至少)标记为可枚举,以便在Object.keys
调用中显示
Object.keys(Object.create({}, {a:{value:1, enumerable:true}}))
在使用带有Object.create()段落的段
段的