次の(ネストされた)オブジェクトがあります。
obj: { subObj: { foo: 'hello world' } };
次に行うことは、次のようにサブオブジェクトを参照することです。
var s = obj.subObj;
ここでやりたいのは、obj
変数からオブジェクトへの参照を取得することですs
。次のようになります。
var o = s.parent;
これはどういうわけか可能ですか?
ベストアンサー1
別のオブジェクト (親) 内のネストされたオブジェクト (子) は、親から直接データを取得することはできません。
これを見てみましょう:
var main = {
name : "main object",
child : {
name : "child object"
}
};
メイン オブジェクトにその子の名前を尋ねると ( main.child.name
)、その名前が返されます。
ただし、その逆はできません。子は親が誰であるかを知らないためです
( は取得できますmain.name
が、 は取得できませんmain.child.parent.name
)。
ちなみに、このヒントを解くには関数が役に立つかもしれません。
上記のコードを拡張してみましょう。
var main = {
name : "main object",
child : {
name : "child object"
},
init : function() {
this.child.parent = this;
delete this.init;
return this;
}
}.init();
関数内では、init
を呼び出すだけで親オブジェクトを取得できますthis
。そのため、オブジェクト内で直接プロパティ
を定義します。その後 (オプションで) メソッドを削除できます。最後に、関数からの出力としてメイン オブジェクトを返します。parent
child
init
init
今試してみれば、main.child.parent.name
うまくいくでしょう。
少し難しいですが、問題なく動作します。