处理jQuery和Object之间的冲突';s";这";
我正在实例化一个对象,该对象创建一个DOM元素并将一个jQuery对象存储为它的一个属性,例如:处理jQuery和Object之间的冲突';s";这";,jquery,oop,Jquery,Oop,我正在实例化一个对象,该对象创建一个DOM元素并将一个jQuery对象存储为它的一个属性,例如: this.element = $("<div></div>"); 内部这个现在应用于DOM元素,而不是原始对象。为了克服这个问题,我可以做以下几点: this.element.click(function() { this.someObjectMethod(); }); var _this = this; this.element.click(function() {
this.element = $("<div></div>");
内部这个现在应用于DOM元素,而不是原始对象。为了克服这个问题,我可以做以下几点:
this.element.click(function() {
this.someObjectMethod();
});
var _this = this;
this.element.click(function() {
_this.someObjectMethod();
});
我想知道,这是一个糟糕的做法,有没有更好的办法?我看过一些,但我不确定它们在这种情况下是否有帮助
此外,我正在使用,这可能会对您的答案产生影响
更新当看到$代理回答时,这些似乎是合理的解决方案,但是您将失去引用DOM元素的能力。您可以使用:
它返回一个函数,该函数将始终在您在第二个参数中指定的对象的上下文中调用(在我们的示例中,外部this
)
$.proxy()
还对事件处理程序强制执行特殊情况:如果您将原始的未经验证的方法传递给off()
或unbind()
以后,即使您没有直接指定代理处理程序,代理处理程序也将被透明地删除。将此
赋值给另一个变量的做法是标准的。人们通常使用self
或that
作为名字(我更喜欢that
作为self
shadowswindow.self
)可能与@jbabey重复-我也看到使用了self
,尽管我必须承认,我发现交替使用这些词有点让人困惑,所以我觉得在前面加上这个
对我来说可能更清楚。我喜欢你的建议,不过,
可能会采纳!谢谢Hanks Frederic,虽然结果非常相似,但是我失去了对jQuery元素的引用。我想知道仅仅给\u this
分配一个引用是否比应用jQuery代理方法更快。@Ian,我不明白为什么您会丢失对jQuery对象的引用。当然,它可以作为this.element
,因为this
仍然是你的插件对象。好的观点@Frederic说得很好,但是假设你有一个更复杂的$(“.inside”,this.element)@Ian,那么你最好再加一个\u this
或that
或self
变量:)这很有用,但是我不喜欢丢失对DOM元素的引用。最后我只是保留了我的原始代码,但我确实了解到$.proxy
方法存在,并且有一些应用程序:)
this.element.click($.proxy(function() {
this.someObjectMethod();
}, this));