在新文檔的聚合物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)是否也有一個唯一的函數引用,不會改變我們可以引用來添加和刪除偵聽器?爲什麼我們首先需要將其包裝在一個匿名函數中?我覺得這樣可以解決在代碼的第二部分中已經解決的問題,但顯然這樣做是出於某種原因。
感謝您的任何幫助或建議提前!