0

私のアプリケーションでは、次のコードを使用します。

(function(){
    var app={
        toHomePage:function(){
            var that=this;
            var handler={
                xx:function(){
                    //now I have to call the clear method.
                    // 1) app.clear();
                    // 2) that.clear()
                }
            };
        },
        resize:function(){},
        clear:function(){}
    }
})();

handlerメソッドで知りたい、appまたはthat?

4

5 に答える 5

0

「それ」を使用する方が良い理由の1つは

それが大きなコードベースであり、関数で「app」変数名を他のオブジェクトに割り当てることになったとしましょう。その場合、「アプリ」を使用すると問題が発生します。

'that'を使用すると、コードサイズが大きくなったり、他の開発者がコードを取り上げたりしても、発生しないので安心できます。

 var app= {// your module}
 // ...... some lines of code
 var prevApp = app;
 // now lets say you do that.
 app = newModule;

また、テストなどによっては、すぐに検出できる場合とできない場合があります。

于 2012-09-27T21:49:56.417 に答える
0

私は他の人たちに同意します。あなたの場合、電話that.toHomepageはバグが多く、電話をかけたいと思うでしょうapp.toHomepage。しかし、本当にパターンを使用したい場合that、正しい方法は次のようにすることです。

(function(){
    var app = new (function(){ // using an anonymous constructor
        var that = this;

        that.toHomepage = function(){
            var handler={
                xx:function(){
                    that.clear()
                }
            };
        };
        that.resize = function(){};
        that.clear = function(){};
    })();
})();

大きな違いに注意してください。thisviaのエイリアシングはthat、関数toHomepageが呼び出されたときに行われるのではなく、オブジェクトが作成されたときに行われます。これは、toHomepageが呼び出されると、関数呼び出しが発生したときに発生するものthatではなく、本当に必要なものが得られることを意味します。this

于 2012-09-27T06:21:58.513 に答える
0

内側の関数では、これは外側のオブジェクトと同じではないため、エイリアスを作成することで、同じオブジェクトと通信していることを確認できます。

つまり、これを使用することで、同じオブジェクトを使用していることを確認できます。

于 2012-09-27T06:04:19.117 に答える
0

最も単純なケースでは、どちらも同じように機能します。

楽しみは がapp.toHomepage()別のもので呼び出されたときに始まるthisので、 を意味するわけではなくapp、変数はまたは を使用しthatて別のものに割り当てられます。Function.prototype.callFunction.prototype.apply

于 2012-09-27T06:08:35.327 に答える