我有一个JS对象,其中一个原型函数是一个点击的事件处理程序。调用该函数时,this
对象将设置为单击绑定的元素。我希望this
成为该函数所属对象的实例。这是可能的,如果是的话,我该怎么做?有或没有jQuery的解决方案对我来说是可以接受的,尽管我确信SO的其余部分会欣赏纯粹的JS解决方案。
我已经尝试了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);
答案 0 :(得分:5)
您可以像这样使用.bind()
:
elem.addEventListener("click", d.sayHello.bind(d));
手动方式是使用您自己的功能:
elem.addEventListener("click", function(e) {
return d.sayHello();
});
答案 1 :(得分:2)
如果您总是打算使用自己的上下文调用函数,请在构造函数运行时执行绑定:
var Dog = function () {
this.sound = "Bark";
this.sayHello = this.sayHello.bind(this);
}
http://jsfiddle.net/04ykpsx1/1/
像_.bindAll
之类的东西可以减少你的样板。
这比迫使你的来电者总是用.bind
调用一个函数更好,因为他们不需要如此深入地理解你的课程。