アプリケーション内の内部メッセージ バスとしてEventEmitter2を使用しています。ここで、いくつかのイベント ハンドラーをバインドおよびバインド解除する必要があります。また、特定のコンテキストにバインドする必要があるため、最終的に次の構文になります。
messageBus.on('foo::bar', _.bind(eventHandler, this));
問題は、後でバインドを解除する必要があることです。そのため、次のように書きました。
messageBus.off('foo::bar', _.bind(eventHandler, this));
_.bind
残念ながら、毎回ラッパー関数の新しいインスタンスが返されるため、これは機能しません。もちろん、一度実行_.bind
して、次のようにラップされた関数をバインドすることもできます。
var fn = _.bind(eventHandler, this);
messageBus.on('foo::bar', fn);
messageBus.off('foo::bar', fn);
これは問題なく機能しますが、イベント ハンドラーがいくつかある場合、コードはすぐに必要以上に読みにくくなります。
bind
関数への呼び出しを外部化する必要なしに、これをどのように解決できますか? 複数回呼び出し、関数とコンテキストが同じ場合に常に同じラッパーを返す代替関数はありますか?