JavaScript-将对象文本作为第二个参数传递给object.create()
参考下面的JavaScript代码片段,问题如下:JavaScript-将对象文本作为第二个参数传递给object.create(),javascript,object-literal,Javascript,Object Literal,参考下面的JavaScript代码片段,问题如下: 当将对象文本{item:{value:“foobar”}赋值给变量(如第1行)时,与作为object.create()的参数传递时,对象的行为为何不同(如第5行) 第5行和第8行之间的区别是什么?也就是说,为什么第5行是将第二个参数传递给Object.create()而不是第8行(重写委托中的项属性)的正确方法 代码段: 1 var obj = {item: {value: "foobar"}}; 2 console.log(obj.ite
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>
1var obj={item:{value:“foobar”};
2控制台日志(对象项);//[对象]
3控制台日志(对象项值);//福巴
4 var delegate={item:“xxx”};
5 var obj1=Object.create(委托,{item:{value:“foobar”});
6控制台日志(obj1.项);//福巴
7控制台日志(obj1.item.value);//未定义
8 var obj2=Object.create(委托,{item:“bar”});
9控制台日志(obj2.item);//
发生这种情况是因为根据此参考:
Object.create
接收第二个参数为“属性描述符”的对象,而不是普通的key:value
对
有关属性描述符的描述,请参阅本文
属性描述符是描述每个属性的对象,而不仅仅是属性值。从您的代码片段:
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
var PrototypeObj = { item: 'xxx' };
var PropertiesObj = {
propertyDescriptor1: {
value: "prop1value",
writable: true,
enumerable: true,
configurable: true
},
propertyDescriptor2: {
value: "prop2value",
writable: true,
enumerable: true,
configurable: true
}
};
var Obj = Object.create(PrototypeObj, PropertiesObj);
这些文章更为详细:
,
非常感谢您的回复,迭戈!我现在明白了。非常感谢你的回复,Richard!我现在明白了。迭戈和理查德都很好地回答了我的问题。我怎么才能把他们两个都归功于呢?还是我只能给一个人信用?