• Как в typescript удалить event handler?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Через this._handler.bind(this) не работает потому что Function#bind возвращает новую функцию (причем каждый раз разную, т.е.
    this._handler.bind(this) !== this._handler.bind(this)
    ).
    Соответственно, надо как-то так:
    this.boundHandler = this.handler.bind(this);
    window.addEventListener(eventType, this.boundHandler);
    //...
    window.removeEventListener(eventType, this.boundHandler);


    Ну естественно можно написать какую-то обертку. Например:
    function bound (eventType: string, handler: Function, context: any): Function {
        var boundHandler = handler.bind(context);
        window.addEventListener(eventType, boundHandler);
        return () => window.removeEventListener(eventType, boundHandler);
    }

    Такая функция вернет функцию, которая при вызове отвяжет ранее привязанный обработчик.
    Ответ написан
    Комментировать