问题
bind可以指定this
通过addEventListener添加事件添加bind指定this后,就无法使用removeEventListener正常移除事件。
原因
fn.bind(xx)会返回一个新函数,也就是说 fn.bind(aa) === fn.bind(bb) 为 false。
解决
可以先把 fn.bind(xx) 返回的函数保存起来,removeEventListener的时候,移除这个保存的函数即可。
addEventListener() {
console.log("addEventListener");
// 先将bind(this)后的function保存起来
this.downHander = this._pointerdown.bind(this);
this.upHander = this._pointerup.bind(this);
this.moveHander = this._pointermove.bind(this);
//鼠标按下事件
this.renderer.domElement.addEventListener("pointerdown", this.downHander);
//鼠标松开事件
this.renderer.domElement.addEventListener("pointerup", this.upHander);
//鼠标移动事件
this.renderer.domElement.addEventListener("pointermove", this.hander3);
}
removeEventListener() {
console.log("removeEventListener");
this.renderer.domElement.removeEventListener(
"pointerdown",
this.downHander
);
this.renderer.domElement.removeEventListener("pointerup", this.upHander);
this.renderer.domElement.removeEventListener(
"pointermove",
this.moveHander
);
}