有几种方法。最简单的是如下:
function ColorDiv(div) {
var that = this;
that.div = div;
that.div.bind("click", that.changeColor);
that.changeColor = function() {
that.div.css("background", "#FF0000");
};
}
var colorDiv = new ColorDiv($("#my-div"));
$("#something-else").click(colorDiv.changeColor);
您保存在变量that
到this
参考,这仅仅是在JavaScript世界常用出于这样的目的的名字。然后你在changeColor
方法中引用that
而不是this
。 (请注意,我用that
无处不在,只是为了保持一致性,即使它实际上有差别的唯一的地方是changeColor
方法内。)
另一种是使用Function#bind
方法。您可以使用它每次调用changeColor
时间,像这样:
var colorDiv = new ColorDiv($("#my-div"));
$("#something-else").click(colorDiv.changeColor.bind(colorDiv));
,或者您可以使用它在ColorDiv
类,以确保所有的方法都正确绑定时,他们被称为:
this.changeColor = (function() {
this.div.css("background", "#FF0000");
}).bind(this);
如链接文章所述,Function#bind
在所有浏览器中都不受支持,因此您需要使用垫片,例如他们提供的垫片,或者可能需要full-fledged ES5 shim。
Underscore.js具有bindAll功能可能是有用的在这里,特别是多种方法:
_.bindAll(this);
最后,值得一提的,你并不真的需要做任何这在具体的例子:刚做
this.changeColor = function() {
div.css("background", "#FF0000");
};
,而不是你有什么,即引用div
变量传递中,而不是存储在参考,因为它们是相同的东西。
我认为问题是,如果你要使用jQuery的方法,如绑定或CSS,你需要的jQuery的范围内做到这一点,即$(DIV).bind,$(格)的.css – thescientist