1

我正在实例化一个创建 DOM 元素并将jQuery 对象存储为它的属性之一的对象,例如:

this.element = $("<div></div>");

我注意到在建立事件时,jQuery 对this上下文的重写可能会导致问题,例如,如果您尝试应用以下内容:

this.element.click(function() {
  this.someObjectMethod();
});

内部this现在适用于 DOM 元素而不是原始对象。为了克服这个问题,我可以执行以下操作:

var _this = this;
this.element.click(function() {
  _this.someObjectMethod();
});

我想知道,这是不好的做法,有没有更好的方法?我查看了一些jQuery 文档applycall但我不确定它们在这种情况下是否会有所帮助。

此外,我正在使用Resig 的“简单继承”类,这可能会对您的答案产生影响。

看到答案后更新$.proxy,这些似乎是合理的解决方案,但是您将失去引用 DOM 元素的能力。

4

1 回答 1

2

您可以使用$.proxy()

this.element.click($.proxy(function() {
    this.someObjectMethod();
}, this));

它返回一个函数,该函数将始终在您在第二个参数中指定的对象的上下文中调用(在我们的例子中,外部this)。

$.proxy()还强制使用事件处理程序的特殊情况:如果您将原始的、未代理的方法传递给off()unbind()稍后,即使您没有直接指定代理处理程序,也将透明地删除它。

于 2013-08-13T13:14:48.657 回答