0

関数のコールバックである次の関数があると仮定します (つまり、「this」はコールバックが渡したものを指します)。

afunction("onclick", callbackfunction)
function callbackfunction() {
   console.log(this); // This refers to item clicked
}

クリックされた項目だけを参照する代わりに、親オブジェクトへの参照を含めたいと思います。通常、私は使用します:

afunction("onclick", $.proxy(callbackfunction, this))

ただし、これにより、アイテムをクリックできなくなります。「プロキシ」「これ」と「これ」をクリックしたアイテムの両方にコールバック関数内でアクセスできるように、両方を保持できる方法はありますか?

4

2 に答える 2

1

なぜだめですか

var self = this;
afunction("onclick", function(evt){
    var clicked = this;
    anotherfunction(clicked,self);
});
于 2013-06-30T01:38:52.200 に答える
0

の 2 つの意味を持つことはできないためthis、1 つを引数として渡す必要があります。

使用する 1 つの可能性は、値として$.proxy渡すことです。これにより、がバインドされなくなります。イベントが発生すると、値は呼び出し元によって設定された期待値になります。nullthisArgthisthis

this次に、関数の最初のパラメーターが受け取る引数として囲みを渡すことができます。

afunction("onclick", $.proxy(callbackfunction, null, this));

この受け渡し機能には、nulljQuery 1.9 以降が必要です。

$.proxyドキュメントから:

jQuery 1.9の時点で、コンテキストが である場合、nullまたはundefinedプロキシされた関数は、プロキシが呼び出されたのと同じ this オブジェクトで呼び出されます。これにより$.proxy()、コンテキストを変更せずに関数の引数を部分的に適用するために使用できます。

于 2013-06-30T01:39:25.463 に答える