我有以下简单的JavaScript“类”:如何从DOM事件调用JavaScript类实例方法?
function Person(params)
{
this.name = params.name;
}
Person.prototype.SayHi = function()
{
alert(this.name + " says hi");
}
可正常工作,当我在的地方运行。运行下面的代码给了我,说一个弹出“爱丽丝说喜”:
var alice = new Person({name:"Alice"});
alice.SayHi();
但是当我尝试将其分配到一个按钮事件,它不会工作:
$("#AliceOnClick").on("click", alice.SayHi);
$("#BobOnClick").on("click", bob.SayHi);
看样子SayHi
函数被调用,但name
字段为空。
最小工作例如:
我在做什么错?
确实。事件监听器(本地JavaScript和jQuery)在被单击的元素的'context“中执行事件处理程序。实际上与将“Function.prototype.apply”的第一个参数设置为DOM元素一样。请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply – Swivel
为了详细说明我上面的评论,基本上'context'是'this'设置为。因此,在使用'Function.prototype.apply'方法时,您可以确定'this'变量是用于特定执行的。这可以进一步说明如下:'函数sayHi(){alert(this.name +“说Hi”;}; sayHi.apply(alice); sayHi.apply(bob);' – Swivel