Через
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);
}
Такая функция вернет функцию, которая при вызове отвяжет ранее привязанный обработчик.