次のようなJavaScriptでネストされたオブジェクトがあります。
{
nameRoot: "my object",
sub: {
nameSub: "my sub object"
}
}
subで定義した関数からnameRootにアクセスしたい。
関数を使用すると、次のように定義できます。
var self = this;
と self を使用しましたが、リテラルオブジェクトでこれを行うにはどうすればよいですか?
次のようなJavaScriptでネストされたオブジェクトがあります。
{
nameRoot: "my object",
sub: {
nameSub: "my sub object"
}
}
subで定義した関数からnameRootにアクセスしたい。
関数を使用すると、次のように定義できます。
var self = this;
と self を使用しましたが、リテラルオブジェクトでこれを行うにはどうすればよいですか?
次のコードを使用すると、親要素にリンクして、親が for-in ループに表示されないようにすることができます。
var parent = { a: 1 };
var child = { b: 2 };
Object.defineProperty(
child, 'parent',
{ value: parent,
enumerable: false }
);
parent.child = child;
child.performAction = function() {
console.log(this.parent.a) // 1
}
したがって、これを行う最善の方法は、関数スコープを使用することです。
function myFunc(){
this.nameRoot = "my object";
}
次に、次のようなことができます。
var func = new myFunc();
func.sub = new myFunc();
func.sub.nameRoot = "my sub object";
明らかに、よりスマートな方法があります (たとえば、関数のパラメーターを介して名前を渡す) が、これが一般的なパターンです。