createjs off()函数从js箭头函数中删除侦听器

问题描述 投票:0回答:1

我使用createjs的on()函数:

myObj.on("mousedown", (e)=>{
    this.myObjMouseDown(e);
});

现在,我想使用off()函数删除该侦听器,我试图编写此代码:

myObj.off("mousedown", (e)=>{
    this.myObjMouseDown(e);
});

但是,该代码似乎无法正常工作。

我应该怎么写才能取消活动?

注:请注意,由于单词“ this”,我需要使用箭头功能。

javascript createjs arrow-functions
1个回答
1
投票

您必须传递对同一函数的引用-但要注意,无论如何,on方法都会为您创建包装函数,因为它还允许您传递范围参数。 on/off方法专门用于解决ES5中的范围问题。 (docs

确保取消订阅的最佳方法是存储对on函数调用的值的引用,并将其传递给off()

var evt = obj.on("click", () => doSomething());
// later
obj.off("click", evt);

另一种取消事件的好方法是在函数回调中将其删除:

doSomething(evt) {
    // Your Code
    if (condition) {
        evt.remove();
    }
}

最后,如果您只是要进行清理,请使用removeAllEventListenersdocs),您可以将其传递给可选的事件类型。

obj.removeAllEventListeners("click");

0
投票

Nichaolas的回答部分正确。您确实必须传递对同一函数的引用-但是on方法无论如何都会为您创建包装函数,因为它还允许您传递范围参数。 on/off方法专门用于解决ES5中的范围问题。 (docs

确保取消订阅的最佳方法是存储对on函数调用的值的引用,并将其传递给off()

var evt = obj.on("click", () => doSomething());
// later
obj.off("click", evt);

另一种取消事件的好方法是在函数回调中将其删除:

doSomething(evt) {
    // Your Code
    if (condition) {
        evt.remove();
    }
}

最后,如果您只是要进行清理,请使用removeAllEventListenersdocs),您可以将其传递给可选的事件类型。

obj.removeAllEventListeners("click");
© www.soinside.com 2019 - 2024. All rights reserved.