很难用语言来解释,但这是我的代码中经常出现的情况。
var self_reference;
self_reference = this;
$(selector).bind('event', function() {
self_reference.someFunction();
});
有什么办法可以不需要临时变量(这里是self_reference)就能写出来?
不,没有。
this
是上下文敏感的,并且 this
在回调函数中会是一个不同的对象。除非你把它复制到某个地方,否则它就会丢失。
$(selector).bind('event', (function() {
this.someFunction();
}).bind(this));
Function.prototype.bind
是 ES5 对 function 的扩展。
您可以使用 _.bind
作为跨浏览器的替代品,或使用 $.proxy
.
$(selector).bind('event', (_.bind(function() {
this.someFunction();
}, this));
$(selector).bind('event', ($.proxy(function() {
this.someFunction();
}, this));
你可以看看jQuery的 代理 功能。
例如:
$.getJSON(url, $.proxy(function()
{
// this has now got the desired context
}, this));