4

我有一个对象,它的方法很少,我想将其中一个绑定为事件处理程序,但它使用来自同一对象的其他方法。在回调函数中保留上下文的最佳做法是什么?正如我从 jQuery UI 核心看到的,为此目的常用的方法 $.proxy,说实话我不喜欢这种方法,不是很清楚。

你有什么建议吗?提前致谢!

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.8 的Function.bind
  • Function.bind(例如,_.bind)的非本地实现
  • 内联匿名函数:$.bind(elm, function() { obj.callback.apply(obj, arguments })

这些都不是绝对比其他更好或更差(除了可能是内联匿名函数,它们有点冗长,Function.bind而且朋友比其他更通用$.proxy)。更重要的是选择一个并保持一致。

于 2012-05-15T07:36:19.157 回答