Рассмотрим следующий код:
class Test {
constructor() {
this.breakpoints = {};
}
add(options) {
// Register the media query
this.breakpoints[options.breakpoint] = window.matchMedia(options.breakpoint);
// Register the listener
this.breakpoints[options.breakpoint].addListener(this.breakpoint.bind(this));
}
remove(options) {
this.breakpoints[options.breakpoint].removeListener(this.breakpoint.bind(this));
}
breakpoint() {
// Do something...
}
}
В приведенном выше коде вы заметите, что я присоединяю прослушиватель событий в методе add
и пытаюсь удалить его в методе remove
. Из-за кода в методе breakpoint
, часть bind(this)
абсолютно необходима.
В результате bind(this)
(я полагаю), removeListener
не удаляет прослушиватель медиазапроса. Есть ли способ решить эту проблему?
Я также пробовал это (без bind
при удалении):
remove(options) {
this.breakpoints[options.breakpoint].removeListener(this.breakpoint);
}