以下のJavaScriptコードスニペットを参照すると、質問があります。
オブジェクトリテラル{item:{value: "foobar"}}が変数に割り当てられた場合(1行目など)とObject.create()に引数として渡された場合(5行目など)で動作が異なるのはなぜですか?
5行目と8行目の違いは何ですか?つまり、5行目が8行目ではなくObject.create()に2番目の引数を渡す正しい方法であるのはなぜですか(デリゲートのitemプロパティをオーバーライドするため)?
コードスニペット:
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>