2013-03-08 13 views
5

thisのコンテキストを保存する一般的な方法は何ですか? もっと速いのは何ですか?あなたは何を好きですか?

  1. $ .proxy(...)

    $('a').on('click', $.proxy(function() { 
        this.close(); 
    }, this)); 
    
  2. のvar自己

    var self = this; 
    
    $('a').on('click', function() { 
        self.close(); 
    }); 
    
+0

私は '$ .proxy()'が好きです –

+0

私の個人的な統計量は約五十です。すべての深刻さ:1つを選択し、それに固執する。 FYI、 '$ .proxy'は、関数のネイティブ' .bind'メソッドと同じです。 –

+0

どのように高速ですか?実行に関しては、[ベンチマーク]する必要があります(http://jsperf.com)。何が好きですか? 2番目のオプションは、私にはわかりやすいので、私は行きたいと思っています。 –

答えて

2

のは、あなたのコードを修正してみましょう。あなたは役に立たない関数宣言を持って、今、self

  • に基づいて、第2の解決策はあるのjQuery
  • を必要としない
  • のみ、基本的なJavaScriptの知識が必要です

    $('a').on('click', $.proxy(this.close, this)); 
    

    としてあなたが$.proxyを使用することができますあなたが頻繁にあなたのself変数を再利用するように、少し読みやすくなります。
  • ははるかに高速です

それはおそらくそれがより多く使われている理由です。あなたはIE8と互換性があるように持っていないとき、あなたはbindを使用することが

注:

$('a').on('click', this.close.bind(this)); 
0

まずいずれかを選択します。余分な変数は必要ありません。

1

どちらも共通しています。

この場合の速度は関係ありません。 0.01ミリ秒後にクリックのコールバックが開始されるかどうかはユーザーにはわかりません。または0.1ms。

まれに、変数メソッドが少し速くなると思いますが、ベンチマークする必要があります。

個人的な好みは、使用される場所やコールバック内のコードによって異なります。可変メソッドの1つの利点は、ネストされたコールバックに対して各レベルにそれを再適用する必要なしに機能することです。

+2

反応時間よりも効率的な方法を選択する別の理由があります。クリック後0.01msの時間は0であることを意味します。スマートフォンでは同じ動作のバッテリーの消耗が直接になります。確かにそれは事実上何もないが、それは速く蓄積する。また、記録のためだけに、0.1から0.01は、やはり1000%の改善です。 – Simon

+0

@サイモン:あなたはミクロ最適化です。最適化したい場合は、実行時間を大幅に節約できるコードが他にもあります。 – Guffa

+2

真実ですが、この例で実際に時間を節約するのではなく、より効率的な方法を選択するという原則です。 – Simon

関連する問題