在新文档的聚合物2.0(https://www.polymer-project.org/2.0/docs/devguide/events#imperative-listeners),它提供了以下例子:聚合物2.0:为什么我们需要一个匿名函数时势在必行添加的侦听
ready() {
super.ready();
this.addEventListener('click', e => this._myClickListener(e));
}
命令式添加事件侦听器。如果你想删除一个监听器,我们就必须做到以下几点(按文档):
constructor() {
super();
this._boundListener = this._myLocationListener.bind(this);
}
connectedCallback() {
super.connectedCallback();
window.addEventListener('hashchange', this._boundListener);
}
disconnectedCallback() {
super.disconnectedCallback();
window.removeEventListener('hashchange', this._boundListener);
}
这个意义,我表面上;我们需要确保对该函数的相同引用同时传递给remove和add事件侦听器,因为这是它为不同侦听器建立索引的方式。
但是,为什么我们必须使用.bind(this)?我明白它会返回一个将函数绑定到“this”的新函数,因此对保存的函数进行新的引用会很有用,因此我们可以添加和删除相同的函数引用。
但是为什么我们不能用第一个例子来做到这一点?第一段代码中的this._myClickListener(e)是否也有一个唯一的函数引用,不会改变我们可以引用来添加和删除侦听器?为什么我们首先需要将其包装在一个匿名函数中?我觉得这样可以解决在代码的第二部分中已经解决的问题,但显然这样做是出于某种原因。
感谢您的任何帮助或建议提前!