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)"を取り除こうとしましたが、それもうまくいきませんでした。どのようにこれは削除されていませんか?
イェジン、バインド 'ので、()'素晴らしい仕事を新しい関数リファレンス –