【发布时间】:2020-03-10 16:07:05
【问题描述】:
我想覆盖已附加到事件的函数。像这样:
let orFn = () => {
console.log('old');
};
buttonEl.addEventListener('click', orFn);
orFn = () => {
console.log('new');
};
但是,当我单击按钮时,仍会调用旧函数。 我见过这个stackoverflow。在我的情况下,我不能使用函数包装器。我想了解为什么这不起作用。
我的代码可在此处进行测试:jsfiddle。
【问题讨论】:
-
它不起作用,因为您设置了对函数的引用。仅仅因为您稍后重新定义了引用并不意味着
addEventListener捕获的引用已更改。旧功能不会神奇地消失。您可以删除一个处理程序并添加一个新的。 -
所以旧的引用绑定到 addEventListener,现在有办法改变它吗?
-
重新定义一个引用不会改变它在别处的值——就像写
let foo = () => "bar"; let bar = foo; foo = () => "plugh";bar在定义bar时得到一个对foo值的引用。更改foo对bar的引用的影响为零。您可以删除处理程序并添加一个新的。您可以保留旧的并添加新的。你可以包装addEventListener并做任何你想做的事情。但是 JS 语义就是 JS 语义。 -
@DaveNewton 谢谢。现在很清楚了。
标签: javascript dom-events