有什么方法可以让这个在回调中被引用?

问题描述 投票:0回答:3

很难用语言来解释,但这是我的代码中经常出现的情况。

var self_reference;
self_reference = this;

$(selector).bind('event', function() {
  self_reference.someFunction();
});

有什么办法可以不需要临时变量(这里是self_reference)就能写出来?

javascript callback dom-events
3个回答
1
投票

不,没有。

this 是上下文敏感的,并且 this 在回调函数中会是一个不同的对象。除非你把它复制到某个地方,否则它就会丢失。


1
投票
$(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));

1
投票

你可以看看jQuery的 代理 功能。

例如:

$.getJSON(url, $.proxy(function()
{
  // this has now got the desired context
}, this));
© www.soinside.com 2019 - 2024. All rights reserved.