gpt4 book ai didi

javascript - 为什么 Object.create 没有按预期克隆属性?

转载 作者:行者123 更新时间:2023-12-02 02:09:31 26 4
gpt4 key购买 nike

如果我在控制台中输入以下内容:

var x = {a: 1};
var y = Object.create(x);
console.log(y);

它显示{}。但如果我在 fiddle 中运行它它显示 {a: 1},这是预期的结果。也在这里:

var x = {a: 1};
var y = Object.create(x);
console.log(y);

那么这是怎么回事?

最佳答案

回答

Why doesn't Object.create clone properties as expected?

因为 Object.create 不应该克隆属性。

JavaScript 对象很棘手

如果我们查看 Object.create 的文档,它说:

The Object.create() method creates a new object, using an existing object as the prototype of the newly created object.

除了自己的属性之外,JavaScript 中的每个对象还从其原型(prototype)继承属性。

现在,棘手的部分是 - 继承的属性仅在某些情况下可见。例如:

  • 属性访问器 – y.ay['a'] – ✅ 查看继承的属性
    • console.log(y.a);//输出 1
  • Object.keysObject.valuesObject.entries – ❌看不到继承的属性
    • console.log(Object.keys(y));//输出 []

Enumerability and ownership of properties 中更全面地涵盖了这些概念。 .

有关原型(prototype)的更全面说明,请参阅 Object prototypes .

为什么 JSFiddle 的打印方式与 Chrome 不同?

显然,JSFiddle 的 console 实现会枚举继承的属性,而 Chrome 的 console 实现则不会。

关于javascript - 为什么 Object.create 没有按预期克隆属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67894953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com