当用作其他对象的事件处理程序时,访问方法中的成员

Access members in method when used as event handler for other object?

本文关键字:访问 方法 成员 事件处理 其他 对象 程序      更新时间:2023-09-26

我有一个类似的JavaScript "类"(如果你想这样称呼它):

function MyClass()
{
  this.something = "hello";
  this.myHandler = function(e) { console.log(this.something); };
}
var taco = new MyClass();

然后我有一个事件处理程序设置像这样:

$('div').on('click', taco.myHandler);

因此,每当单击div时,事件处理程序就会触发。然而,this.something出现作为undefined,我猜是因为this是指向$('div')的jQuery选择器,而不是指向类。

当一个类的方法被用作另一个对象的事件处理程序时,我如何访问该类的私有和公共成员?

可以将函数对象与实际对象绑定,如下所示

$('div').on('click', taco.myHandler.bind(taco));

实际的问题是,当你说taco.myHandler时,你只会得到函数对象。this只有在实际调用时才会被分配。因此,当use单击div时,它将调用传递给它的函数对象。由于找不到与之关联的对象,默认情况下,JavaScript将把this设置为全局window对象,其中something没有定义。这就是为什么你得到undefined

当您将函数对象与实际对象绑定时,它将创建一个新的函数,其中this绑定保持完整。