这是另一个Javascript关闭问题。文件加载后,我立即运行以下代码:
var handlers = (function () {
var clickHandler = function() { alert ('click!'); }
return {
clickHandler : clickHandler
}
}());
$('#element').addEventListener('click', handlers.clickHandler);
然后,在以后的某个时间点,我想替换处理程序的功能,然后执行以下操作:
handlers.clickHandler = function() { alert ('changed handler!'); }
据我对Javascript闭包的了解,事件侦听器应保留clickHandler函数的引用,因此功能应相应更改。然而,事实并非如此。事件侦听器触发初始功能。我已经设法使用
eval
达到了想要的结果,但是这感觉像是一个hack。有合法的方法做我想做的事吗? 最佳答案
$('#element').on('click', /*the solution: */ () => handlers.clickHandler());
您需要在执行处理程序而不是注册时解析标识符。可以通过将调用包装到一个函数中来完成,就像我上面所做的那样(使用箭头函数)。