当用作其他对象的事件处理程序时,访问方法中的成员
Access members in method when used as event handler for other object?
我有一个类似的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
绑定保持完整。
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 从vuejs中的组件模板访问父方法
- 访问对象的最简单方法'的单独财产
- 有没有一种方法可以从光滑的网格访问插件
- 尝试访问方法的 OOP JavaScript
- 从匿名函数层内访问方法变量
- jQuery控件之外的访问方法
- 访问方法内部的变量's函数
- Angular2:模板中类的访问方法
- 在javascript中使用对象访问方法
- 如何在原型继承模式中访问方法
- async模块内部类的访问方法或
- 当用作其他对象的事件处理程序时,访问方法中的成员
- 在javascript中访问方法skillet.toString()
- 为什么我的applet在通过JavaScript访问方法时不能加载本地库?
- 另一个插件的访问方法
- 使用jquery脚本时如何访问方法
- Javascript -如何在没有'this'的情况下改变作用域和访问方法?
- 为什么我的主干模型奇怪地嵌套在集合中,需要钻取才能访问方法/属性?
- Javascript OOP -从原型设置器访问方法