gpt4 book ai didi

JavaScript - 将对象文字作为第二个参数传递给 Object.create()

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:10 25 4
gpt4 key购买 nike

引用下面的 JavaScript 代码片段,问题:

  1. 为什么对象文字 {item: {value: "foobar"}} 在分配给变量时(如第 1 行)与作为参数传递给 Object.create() 时(如在第 5) 行?

  2. 第 5 行和第 8 行之间有什么区别 - 即为什么第 5 行是将第二个参数传递给 Object.create() 而不是第 8 行(覆盖委托(delegate)中的项目属性)的正确方法?

代码片段:

 1 var obj = {item: {value: "foobar"}};
2 console.log(obj.item); // [object Object]
3 console.log(obj.item.value); // foobar

4 var delegate = {item: "xxx"};
5 var obj1 = Object.create(delegate, {item: {value: "foobar"}});
6 console.log(obj1.item); // foobar
7 console.log(obj1.item.value); // undefined

8 var obj2 = Object.create(delegate, {item: "bar"});
9 console.log(obj2.item); // <nothing>

最佳答案

发生这种情况是因为根据此引用:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

Object.create 接收一个带有“属性描述符”作为第二个参数的对象,而不是普通的 key:value 对。

请参阅此博文:http://ejohn.org/blog/ecmascript-5-objects-and-properties/有关属性描述符的说明。

属性描述符是描述每个属性的对象,而不仅仅是属性值。从您的代码片段:

2 obj.item // [object Object] since item is the object {value:"foobar¨}

6 obj1.item // foobar, the descriptor says that the value
// of item is "foobar"

7 obj1.item.value // undefined since item="foobar", value is part of
// the object that describes "item" not item itself

9 obj2.item // nothing because the descriptor that you passed
// for item is incomplete

关于JavaScript - 将对象文字作为第二个参数传递给 Object.create(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015579/

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