4

メソッドがほとんどないオブジェクトがあり、そのうちの1つをイベントハンドラーとしてバインドしたいのですが、同じオブジェクトの他のメソッドを使用しています。コールバック関数でコンテキストを保持するためのベストプラクティスは何ですか?この目的で一般的に使用されるメソッド$.proxyのjQueryUIコアからわかるように、正直なところ、このアプローチは好きではありません。あまり明確ではありません。

何か提案はありますか?前もって感謝します!

var obj = {
   someMethod: function(){...},
   callback : function(){
       ...
       this.someMethod(); // or this.someMethod.call(...)
       ...
   },
};
// wrong
$.bind(elm, obj.callback);
// using $.proxy
$.bind(elm, $.proxy(obj.callback, obj));
4

1 に答える 1

4

あなたのオプションは基本的に次のとおりです。

  • $.proxy(ご指摘の通り)
  • JavaScript 1.8Function.bind
  • Function.bind(たとえば、_.bind)の非ネイティブな実装
  • インライン無名関数:$.bind(elm, function() { obj.callback.apply(obj, arguments })

これらのどれも、他のものよりも明らかに優れているわけでも、明らかに劣っているわけでもありません (インラインの無名関数を除いて、これは一種の冗長でありFunction.bind、フレンドは よりも少し一般的です$.proxy)。より重要なのは、1 つを選択して一貫性を保つことです。

于 2012-05-15T07:36:19.157 に答える