处理jQuery和Object之间的冲突';s";这";

处理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() {

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

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
shadows
window.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));