有幾種方法。最簡單的是如下:
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