1

:「モジュールパターンを明らかにする」で書かれたjavascriptクラスがあります:

myObject = function () {
    var varA,
        varB,

        methodA = function (data) {

            //Some code...
        },
        methodB = function (data) {
             var that = this;
             that.methodA("a"); // --> 'that' recognize only public methods: 'methodB' / 'methodC' !!!
        },
        methodC = function (data) {

        };
        return {
            methodB : methodB,
            methodC : methodC,
         };
} ();

'methodB'内の'this'でわかるように、クラスのプライベートメソッドを認識しません。

編集: 私の意図は、パブリッククラスからヘルパープライベートメソッドを呼び出すことでした。このプライベートクラス内で「これ」が必要でした。'methodB'から直接'methodA( "a")'を呼び出す場合('that'なし)、'this'はありません('this'はグローバルコンテキストになります)。解決策は次のとおりです。

methodA.call(this, "a");
4

1 に答える 1

4

まず第一に、あなたはエラーがあります

return {
    methodB = methodB,
    methodC = methodC,
}

そのはず

 return {
    methodB : methodB,
    methodC : methodC
}

あなたの例ではあなたは

methodB = function (data) {
         var that = this;
         that.methodA("a");
    }

that=thisキーワードthisは現在のオブジェクトを参照していて、オブジェクトを返しましたが、オブジェクトにはmethodBありmethodCません。現在のオブジェクトの一部ではないため、内部では機能していませんが、次のように記述されmethodAthat.methodA("a")いるmethodB場合methodA

methodB = function (data) {
    methodA("a");
}

その後、それは実行されたでしょう。

that=thisthis=myObjectmyObjectは2つのメソッドしかないため、に存在methodBしないため実行しないでください。methodCthat.methodA("a")myObject.methodA("a")myObject

DEMO-1およびDEMO-2

于 2012-06-17T16:18:45.580 に答える