我有一个对象:
var Person = function(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello" + this.name + ", " + this.age);
}
var sam = new Person("Sam", 31);
我想将Person.sayHello
称为onclick回调,我发现我可以使用bind方法。
$("#button").on("click", Person.sayHello.bind(sam));
也许有更多的通用解决方案或jQuery的一些特定方法来解决jQuery的这个问题?
我需要添加一个注释。我可以拥有Person类的多个实例,并且我希望使click能够为所有这些实例工作。我想到了所有Person实例的一些循环并将它们绑定到回调。
答案 0 :(得分:1)
由于您正在使用jQuery,因此可以使用jQuery.proxy()
方法,该方法专门用于附加事件处理程序并保持this
完整。所以,像:
$('#button').on('click', $.proxy(sam, 'sayHello'));
但是,如果您要通过单击按钮循环浏览一堆,您甚至不需要担心所有这些。
var sam = new Person("Sam", 31);
var bob = new Person("Bob", 32);
var pat = new Person("Pat", 33);
var people = [sam,bob,pat];
$('#button').on('click', function () {
people.forEach(function (person) {
person.sayHello();
});
});
这假设一个支持Array.prototype.forEach的相对较新的浏览器。基本上,那些People
对象已经知道他们正在做什么。
如果您需要支持旧浏览器,请将forEach
更改为:
$.each(people, function (i, person) {
person.sayHello();
});
感谢@dandavis提示。