JavaScript - 将对象文字作为第二个arg传递给Object.create() [英] JavaScript - passing an object literal as second arg to Object.create()

查看:88
本文介绍了JavaScript - 将对象文字作为第二个arg传递给Object.create()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

参考下面的JavaScript代码段,问题:

Referring to the JavaScript code snippet below, questions:


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

  1. Why does the object literal {item: {value: "foobar"}} behave differently when assigned to a variable (like in line 1) vs. when passed as an argument to Object.create() (like in line 5)?

第5行和第8行有什么区别 - 也就是为什么第5行是将第二个参数传递给Object.create()而不是第8行(以覆盖委托中的item属性)的正确方法? / p>

What is the difference between line 5 and line 8 - i.e. why is line 5 the correct way to pass the second argument to Object.create() and not line 8 (to override the item property in delegate)?

Code Snippet:

Code Snippet:

 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

This happens because according to this reference: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

Object.create 接收带有属性的对象描述符作为第二个参数,不是普通的键:值对。

Object.create receives an object with "property descriptors" as second argument, not plain key:value pairs.

请参阅此博客文章: http://ejohn.org/blog/ecmascript-5-objects-and-properties/ 用于描述属性描述符。

See this blog post: http://ejohn.org/blog/ecmascript-5-objects-and-properties/ for a description of property descriptors.

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

A property descriptor is an object that describes each property, not just the property value. From your code snippet:

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 - 将对象文字作为第二个arg传递给Object.create()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆