2012-02-09 13 views
1

プライベート変数Pを持つメソッドEを持つサブオブジェクトSを含むメインオブジェクトMが必要です。また、メソッドEが別の変数Vを介してMにアクセスできるようにします。プライベート変数のために私はこれをやっている:私が思いついたプライベート変数と親オブジェクトへのアクセス

M.S = function() { 
    var P, 
     V; // how to set V to M? 

    return { 
     E: function() { 
      // stuff goes here 
     } 
    } 
}(); 

一つの解決策は、最後の行に()を削除することでした、その後、M.、この方法として匿名S-作成関数を呼び出します問題を解決していますが、私はそれについてもっと洗練された方法があると思っています。

M.S = function() { 
    var P, 
     V = this; 

    return { 
     E: function() { 
      // stuff goes here 
     } 
    } 
}; 
M.S = M.S() 

主に私はJavaScriptでプライベート変数に新たなんだから、このための良い方法であるかを知る必要があります。

答えて

3

これを行うにはかなり簡単な方法は次のとおりです。

M.S = function (V) { // <-- V is declared locally 
    var P; 

    return { 
     E: function() { 
      // stuff goes here 
     } 
    }; 
}(M); 

Vはローカルに正式なパラメータを使用して宣言されています。 Mの参照はVfunction(V){...}(M);に割り当てられています。

Mが後で再宣言されても、Vは依然として正しいオブジェクトを指します。

+0

これはきれいに簡単です!私が最初に探していたのは "this"を使ってそれを行う方法でしたが、これはコードの行を節約します。 :) – Reason

1

これはどうですか?あなたはMの文脈でSを呼び出す:

M.S = function() { 
    var P, 
     V = this; // how to set V to M? 

    return { 
     E: function() { 
      // stuff goes here 
      // you can refer M via V reference 
     } 
    } 
}.call(M); 
+0

偉大な解決策、私は解決しようとしていた問題を解決する方法を示しました.MのコンテキストからSを作成する関数を呼び出してください。ありがとうございました! – Reason

関連する問題