【发布时间】:2019-01-06 05:31:43
【问题描述】:
基本场景
以前有人问过这个问题。事实上,有人问过with nearly the same title,但请稍等片刻,我认为这个问题还没有很好的答案。
所以,我们有一个事件监听器:
fancyButton.addEventListener('click', this.launchKitty, true);
然后我们有一个函数:
// assume this.setForLaunch was set somewhere
launchKitty = () => {
if(this.setForLaunch){ // behold, this!
console.log('farewell, feline!')
}
}
我们有一个事件监听器和一个可以访问外部this 的函数,这很简洁。删除很容易:
fancyButton.removeEventListener('click', this.launchKitty, true);
但是如果我们不想使用this 怎么办?
参数!
如果我们不想依靠this,而是想传递addEventListener 一个参数怎么办?像这样:
fancyButton.addEventListener('click', () => {this.launchKitty(true)}, true);
还有一个稍作修改的launchKitty():
launchKitty(setForLaunch) {
if(setForLaunch){ // now we're using a parameter!
console.log('farewell, feline!')
}
}
到目前为止,一切都很好。小猫推出。那么移除监听器呢?
fancyButton.removeEventListener('click', () => {this.launchKitty}, true);
不会工作。我们的() => {} 是匿名的,因此removeEventListener 不知道如何找到它。
问题
我们如何向事件监听器传递一个参数,然后再移除该事件处理程序?
请随时挑战我的任何假设。启动这只猫的方法有很多。
谢谢!
【问题讨论】:
标签: javascript