我有一个只有很少方法的对象,我想将其中一个绑定为事件处理程序,但它使用来自同一对象的其他方法。在回调函数中保留上下文的最佳实践是什么? 正如我从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));
答案 0 :(得分:4)
您的选择基本上是:
$.proxy
(正如您所指出的那样)Function.bind
Function.bind
的非原生实现(例如,_.bind
)$.bind(elm, function() { obj.callback.apply(obj, arguments })
这些都不比其他更好或者肯定更糟糕(除了内联匿名函数,它们有点冗长,Function.bind
和朋友比$.proxy
更通用。更重要的是选择一个并保持一致。