コールバックにコンテキストの問題があります。私はグーグルでいくつかのオプションを見つけました:
- ネイティブ バインド - 古いブラウザではサポートされていません
- JQuery プロキシ
- 下線バインド
古いブラウザーをサポートする必要がない場合は、ネイティブ バインドを使用します。これらの間に注意すべき重要な違いはありますか?
これらは、呼び出し/適用の代替として使用できますか?
コールバックにコンテキストの問題があります。私はグーグルでいくつかのオプションを見つけました:
古いブラウザーをサポートする必要がない場合は、ネイティブ バインドを使用します。これらの間に注意すべき重要な違いはありますか?
これらは、呼び出し/適用の代替として使用できますか?
私の知る限り、バインドとプロキシにはわずかな違いがあり、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