处理jQuery和Object的“this”之间的冲突

时间:2013-08-13 13:12:27

标签: jquery oop

我正在实例化一个Object,它创建一个DOM元素并将 jQuery Object 存储为其中一个属性,例如:

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

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

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

内部this现在适用于DOM元素而不是原始Object。为了克服这个问题,我可以做到以下几点:

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

我想知道,这是不好的做法,还有更好的方法吗?我看了一些jQuery docs on apply and call,但我不确定他们是否会在这种情况下提供帮助。

此外,我正在使用Resig's 'simple inheritence 'Class,这可能会对您的答案产生影响。

看到$.proxy答案时,

更新,这些似乎是合理的解决方案,但是您无法引用DOM元素。

1 个答案:

答案 0 :(得分:2)

您可以使用$.proxy()

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

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

$.proxy()还强制使用事件处理程序的特殊情况:如果您稍后将原始的,未经过批处理的方法传递给off()unbind(),即使您执行了代理处理程序,也会被透明地删除不要直接指定。