我正在实例化一个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元素。
答案 0 :(得分:2)
您可以使用$.proxy():
this.element.click($.proxy(function() {
this.someObjectMethod();
}, this));
它返回一个函数,该函数将始终在您在第二个参数中指定的对象的上下文中调用(在我们的示例中,是外部this
)。
$.proxy()
还强制使用事件处理程序的特殊情况:如果您稍后将原始的,未经过批处理的方法传递给off()
或unbind()
,即使您执行了代理处理程序,也会被透明地删除不要直接指定。