1

誰かがJSで奇妙に思えることを理解するのを手伝ってくれませんか?

以下のコードは機能します。関数inlineEditEvent.init()が呼び出され、次にt.copy()正しく呼び出されます ( where var t = this;)。

ただし、それを に置き換えるとthis.copy()、エラーが発生しますthis.copy is not a function

ここの違いは何ですか?以下の方法は機能するのに、最後の段落で説明した方法では機能しないのはなぜですか? ありがとう。

jQuery(function($){

    $(document).ready(function(){inlineEditEvent.init();});

    inlineEditEvent = {

        init : function(){

            var t = this;

            /** Copy the row on click */
            $('#the-list').on('click', '.row-actions a.single-copy', function(){
                return t.copy();
            });

        }, // init

        copy : function(){

            // Do stuff here

        }

    } // inlineEditEvent

});
4

4 に答える 4

2

(関数の)tコンテキスト変数として設定しています。クリック ハンドラーの内部では、関数ではなく、クリック ハンドラーを参照するようになりました。したがって、関数ではありません。thisinitthisinitthis.copy()

于 2013-07-18T13:24:42.407 に答える
1

あなたが言うとき、それはその文脈で意味されたvar t= this;ものを指します. this後でこれを参照しようとすると、それがa.single-copy存在する新しいコンテキストであるため、代わりに参照しています。

于 2013-07-18T13:24:53.763 に答える
1

t.copy();とは別の関数で表示されますvar t = this;。の値はthis各関数内で変化します。

于 2013-07-18T13:25:19.943 に答える
1

thisthis関数のスコープ内で参照します。selfそのため、関数のスコープ内でアクセスできるように変数を設定する必要があります。jQuery を使用していることを考えると、 $.proxyを使用できます。

$.proxy(function(){
    return this.copy();
},this)
于 2013-07-18T13:25:35.287 に答える