我在javascript中遇到eventlisteners的问题可能是由于我对语言的控制不完整。
我希望使用addEventListener()/ attachEvent()注册事件侦听器;我还希望以后能够删除监听器,因此我无法注册匿名函数。
假设我现在想要将对象的方法注册为事件侦听器。首先,我希望addEventListener(event, node, object.method)
能够发挥作用。但是,在阅读了事件后,我现在明白了this
关键字将在调用事件监听器时引用事件目标,而不是我的对象。
要解决这个问题,我已经创建了一个新方法,对象的methodCallback,如下所示:
object.methodCallback = function () {
self.method();
}
self
变量设置为在对象构造函数中复制this
。然后我将object.methodCallback注册为eventlistener。
我觉得这一定是错误的做法。但是正确的方法是什么?
如果这个问题很常见,我很抱歉,但到目前为止我还没能找到答案
答案 0 :(得分:2)
人们以这种方式使用自我是很常见的。我会说如果你在类中则使用'self',否则使用'that'。
您需要在范围链中定义一个自我/那个级别。
var self = this;
object.methodCallback = function () {
self.method();
}
是的,这就是它滚动的方式。不幸的是
答案 1 :(得分:0)
重新分配“此范围”以便稍后引用它是Javascript中可接受的行为,因为您可能稍后需要它。诸如jQuery和YUI之类的Javascript库为您提供了一个易于使用的功能(例如jQuery中的$.proxy()或YUI.bind())。鉴于它们为您提供了这样的功能,我猜这是JS中的常用方法