6

コールバックにコンテキストの問題があります。私はグーグルでいくつかのオプションを見つけました:

  1. ネイティブ バインド - 古いブラウザではサポートされていません
  2. JQuery プロキシ
  3. 下線バインド

古いブラウザーをサポートする必要がない場合は、ネイティブ バインドを使用します。これらの間に注意すべき重要な違いはありますか?

これらは、呼び出し/適用の代替として使用できますか?

4

2 に答える 2

18

私の知る限り、バインドとプロキシにはわずかな違いがあり、jQuery を使用している場合は大きな問題になる可能性があります。Function.prototype.bindは常に新しい関数ポインタを返します。jQuery.proxy は、同じ引数のプロキシがまだ作成されていない場合にのみ、新しい関数を返します。このようにしたいというわけではありませんが、次のようになります。

$(elm).on('click', doStuff.bind(thing)); //adds event handler
$(elm).off('click', doStuff.bind(thing)); //does not remove event handler as 2nd call of doStuff.bind(thing) always returns a new/different function

$(elm).on('click', $.proxy(doStuff, thing)); //adds handler
$(elm).off('click', $.proxy(doStuff, thing));//DOES remove handler, as a second call to $.proxy(doStuff, thing) is smart enough to know about similar use-cases

//Likewise, if you just passed 'thing.doStuff()' into the $.off() method, it would also work
于 2014-04-04T10:48:06.223 に答える