5

次のようなJavaScriptでネストされたオブジェクトがあります。

{
nameRoot: "my object",
sub: {
  nameSub: "my sub object"
}
}

subで定義した関数からnameRootにアクセスしたい。

関数を使用すると、次のように定義できます。

var self = this;

と self を使用しましたが、リテラルオブジェクトでこれを行うにはどうすればよいですか?

4

2 に答える 2

2

次のコードを使用すると、親要素にリンクして、親が 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
}
于 2012-08-29T15:03:32.987 に答える
0

したがって、これを行う最善の方法は、関数スコープを使用することです。

function myFunc(){
   this.nameRoot = "my object";
}

次に、次のようなことができます。

var func = new myFunc();
func.sub = new myFunc();
func.sub.nameRoot = "my sub object";

明らかに、よりスマートな方法があります (たとえば、関数のパラメーターを介して名前を渡す) が、これが一般的なパターンです。

于 2012-08-29T14:48:26.897 に答える