[英]Why Object.create doesn't clone properties as expected?
如果我在控制台中輸入:
var x = {a: 1};
var y = Object.create(x);
console.log(y);
它顯示{}
。 但是如果我在小提琴中運行它,它會顯示{a: 1}
,這是預期的結果。 也在這里:
var x = {a: 1}; var y = Object.create(x); console.log(y);
那么發生了什么?
為什么 Object.create 沒有按預期克隆屬性?
因為Object.create
不應該克隆屬性。
如果我們查看Object.create
的文檔,它會說:
Object.create() 方法創建一個新的 object,使用一個現有的 object作為新創建的 ZA8CFDE63318CBD4B666ZZZ 的原型。
除了自己的屬性外,JavaScript 中的每個 object 還繼承了原型的屬性。
現在,棘手的部分是——繼承的屬性僅在某些情況下可見。 例如:
ya
或y['a']
– ✅ 看到繼承的屬性
console.log(ya); // outputs 1
Object.keys
, Object.values
, Object.entries
– ❌沒有看到繼承的屬性
console.log(Object.keys(y)); // outputs []
這些概念在屬性的可枚舉性和所有權中得到了更全面的介紹。
有關原型的更詳盡解釋,請參閱Object 原型。
顯然,JSFiddle 的console
實現枚舉了繼承的屬性,而 Chrome 的console
實現沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.