0

Calendarクラスがあり、一度インスタンス化された後、CalendarHostlerクラスがCalendarのコンストラクタで一度インスタンス化されます。私はそれらの内部のカレンダーオブジェクトにアクセスできるように、 "this"(カレンダーオブジェクト)をバインドしてイベントリスナーを追加します。これはすべて正常に動作します。Javascript - removeEventListenerがハンドラの別のバージョンを取得しているようですか?

つまり、イベントハンドラ内にイベントリスナーを追加し、それでもカレンダーオブジェクトである「this」をバインドしようとするまでです。追加は機能しますが、イベントリスナーの削除は行いません。それは、私がそれを追加したときに渡された関数の別のコピーをremoveが取得しているようです。

this.containerDiv.addEventListener("mousemove", this.eventHandler.calMousemove.bind(this)); 

が、その後、別のハンドラで、私はこのようにそのリスナーを削除します:

this.containerDiv.addEventListener("mousedown", this.eventHandler.calMousedown.bind(this)); 

が、その後のEventHandlerでcalMousedownに、私は次の操作を行います。ここではカレンダーにイベントリスナーを追加します
this.containerDiv.removeEventListener("mousemove", this.eventHandler.calMousemove.bind(this)); 

でも削除しません。 「this」は、カレンダーオブジェクト全体で1つのカレンダーオブジェクトにする必要がありますが、削除には関数の別のコピーがあるかのようです。私は "this"がすべてのハンドラのCalendarオブジェクトであることを確認しました。私はまた、削除した "。bind(this)"を取り除こうとしましたが、それもうまくいきませんでした。どのようにこれは削除されていませんか?

+0

イェジン、バインド 'ので、()'素晴らしい仕事を新しい関数リファレンス –

答えて

0

bindは、新しい関数を作成しますが、あなたはそれをキャッシュすることができます

var handler = this.eventHandler.calMousedown.bind(this); 

this.containerDiv.addEventListener("mousedown", handler); 
... 
this.containerDiv.removeEventListener("mousedown", handler); 
+0

を返します。私はバインドが新しいコピーを作成することを認識しませんでした。どうもありがとう。 – linus72982

+0

10分で受け付けてくれます。 – linus72982

関連する問題