Object.keys(Object.create({a:1}))
[]
我期待["a"]
的結果。你如何使用Object.prototype/Object.create來確保生成的對象有其預期的鍵?從Object.create獲取密鑰
Object.keys(Object.create({a:1}))
[]
我期待["a"]
的結果。你如何使用Object.prototype/Object.create來確保生成的對象有其預期的鍵?從Object.create獲取密鑰
對象中要傳遞一個空對象{}
作爲第一個參數,作爲原型,以及之後的一系列對象,哪些屬性將被複制到結果對象中。
此外,每個屬性都有被標記(至少)爲枚舉它在Object.keys
來電顯示
Object.keys(Object.create({}, {a:{value:1, enumerable:true}}))
這在the documentation在解釋使用propertiesObject大吵的Object.create()段落
爲什麼這是低調?感謝您提供'enumerable' – AJP
你正確使用Object.create
但請注意,這種方法創建一個具有指定原型對象的新對象和Object.keys
僅返回自己的對象的屬性(所以yopur情況下a
屬性在返回的對象的原型不是對象本身設置) (在原型上設置的屬性不被考慮)。
您還可以使用其他propertiesObject
作爲Object.assign
中的第二個參數,此對象的屬性將直接設置在返回的對象上。例如:
var o = Object.create({a: 'test'}, {b: {value: 'lorem', enumerable: true}})
在上面的代碼a
屬性上o
對象protoype限定,而b
丙直接定義在其上,以便Object.keys(o)
將返回['b']
。
在你的情況,你可以使用這樣的(空的對象作爲第一個參數):
Object.create({}, {b: {value: 'lorem', enumerable: true}});
但genarlly它不會使培訓就業處,因爲你可以使用對象文本,而無需使用Object.assign
:
Object.keys({a:1})
As @AJP提到: Object.create實際上僅用於定義getter/setter,原型繼承等的更高級用例。
那是因爲什麼是你Object.keys()
是繼承{a:1}
所以a
是不是自己該對象的屬性,因此鍵將返回一個空數組
您可能想要使用Object.keys(Object.assign({},{a:1}))''。在這種情況下,Object.assign會將鍵複製到空對象。 – Mako