のコンテキストを保持する一般的な方法は何this
ですか? 何が速いですか?何がいいですか?
$.proxy(...)
$('a').on('click', $.proxy(function() { this.close(); }, this));
自己変数
var self = this; $('a').on('click', function() { self.close(); });
のコンテキストを保持する一般的な方法は何this
ですか? 何が速いですか?何がいいですか?
$.proxy(...)
$('a').on('click', $.proxy(function() {
this.close();
}, this));
自己変数
var self = this;
$('a').on('click', function() {
self.close();
});
コードを修正することから始めましょう。$.proxy
役に立たない関数宣言があります。
$('a').on('click', $.proxy(this.close, this));
さて、に基づく2番目のソリューションself
self
特に変数を頻繁に再利用する場合は、もう少し読みやすくなりますそれがおそらくより多く使用されている理由です。
IE8 と互換性がある必要がない場合は、bindを使用できます。
$('a').on('click', this.close.bind(this));
どちらも一般的です。
この場合の速度は関係ありません。クリックのコールバックが 0.01 ミリ秒後に開始されても、ユーザーは気付かないでしょう。または0.1ミリ秒。
まれに問題になる場合がありますが、変数メソッドの方がわずかに速いと思いますが、ベンチマークする必要があります。
私の個人的な好みは、それが使用される場所と、コールバック内のコードが何をするかによって異なります。変数メソッドの利点の 1 つは、各レベルに再適用する必要なく、ネストされたコールバックに対して機能することです。
最初のものを選択します。追加の変数は必要ありません。