Deixe-me falar sobre a conclusão primeiro:
ligação pode especificar isso
Adicione eventos por meio de addEventListener e removeEventListener remove os eventos de escuta, mas a função de escuta
Depois de adicionar o vínculo para especificar isso, ele não pode ser removido normalmente
Motivo: fn.bind(xx) retornará uma nova função, ou seja, fn.bind(aa) === fn.bind(bb) é falso
Solução: Conheça a causa do problema, assim fica fácil resolver
Você pode salvar a função retornada por fn.bind(xx) primeiro
Ao removerEventListener, basta remover esta função salva.
Caso: o evento de clique não é mais acionado após 2 segundos
let obj = {
name: "Eric",
age: 20,
}
let bindHandler = clickHandler.bind(obj)
dom.addEventListener('click', bindHandler)
function clickHandler(evt) {
console.log(this)
// {name: "Eric", age: 20}
}
setTimeout(() => {
box.removeEventListener('click', bindHandler)
}, 2000)