我有一個JS對象,它的一個原型函數是一個點擊事件處理程序。當該函數被調用時,this
對象被設置爲點擊所綁定的元素。我想this
是該函數所屬對象的實例。這是可能的,如果是這樣,我該怎麼做?有或沒有jQuery的解決方案對我來說都是可以接受的,儘管我確信SO的其餘部分會讚賞純JS解決方案。如何防止「this」被事件處理程序反彈
我試過bind
ing the function to this
,它被綁定到窗口而不是對象的實例。
我想要的例子:在this demo(下面重複的代碼)中,我想要一個警報,在點擊按鈕時顯示「Bark」。
var Dog = function() {
this.sound = "Bark";
}
Dog.prototype = {
sayHello: function (e) {
if (typeof this.sound == "undefined") {
alert("I don't know what sound I should make!\n" + this);
} else {
alert(this.sound);
}
}
}
var d = new Dog();
var elem = document.getElementById("click");
elem.addEventListener("click", d.sayHello);
我更喜歡這種方法,因爲它不需要我每次都綁定,因爲你在最後一句話中說了什麼,調用者應該不需要知道方法是如何工作的,而且他們需要綁定的東西。謝謝! – 2015-02-06 21:39:31
是的,我認爲這是你類的「實現細節」 - 沒有人應該關心你是否在函數內部使用'this';它應該像調用者期望的那樣工作。當你的類暴露了一個僞靜態函數,這個函數打算在多個上下文中調用時,調用者必須手動「綁定」。 – Interrobang 2015-02-06 22:12:30