将上下文传递给回调函数的最佳实践

时间:2012-05-15 07:16:26

标签: jquery jquery-ui

我有一个只有很少方法的对象,我想将其中一个绑定为事件处理程序,但它使用来自同一对象的其他方法。在回调函数中保留上下文的最佳实践是什么? 正如我从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));

1 个答案:

答案 0 :(得分:4)

您的选择基本上是:

  • $.proxy(正如您所指出的那样)
  • JavaScript 1.8的Function.bind
  • Function.bind的非原生实现(例如,_.bind
  • 内联匿名函数:$.bind(elm, function() { obj.callback.apply(obj, arguments })

这些都不比其他更好或者肯定更糟糕(除了内联匿名函数,它们有点冗长,Function.bind和朋友比$.proxy更通用。更重要的是选择一个并保持一致。