87,923
社区成员
发帖
与我相关
我的任务
分享
class demo{
constructor(dom){
this.dom = dom
this.downMsg= 'mousedown'
this.moveMsg = 'mousemove'
this.upMsg = 'mouseup'
this.outEvent = {type: 'outevent'}
this.dom.addEventListener('mousedown', this.onMouseDown, false)
}
onMouseDown(event){
console.log(this.downMsg) // 这里会出错,this已经指向dom节点,而非class对象实例,所以this.downMsg是undefined
console.log(event.pageX, event.pageY)
// 下面两行绑定时没问题,调用时会出错,调用时this已经指向dom节点,而非class对象实例,所以this.onMouseMove和this.onMouseUp是undefined
this.dom.addEventListener('mousemove', this.onMouseMove, false)
this.dom.addEventListener('mouseup', this.onMouseUp, false)
}
onMouseMove(event){
console.log(this.moveMsg) // 这里会出错,调用时this已经指向dom节点,而非class对象实例,所以this.moveMsg是undefined
console.log(event.pageX, event.pageY)
document.dispatchEvent(this.outEvent) // 这里会出错,调用时this已经指向dom节点,而非class对象实例,所以this.outEvent是undefined
}
onMouseUp(event){
console.log(this.upMsg) // 这里会出错,调用时this已经指向dom节点,而非class对象实例,所以this.upMsg是undefined
// 下面两句解绑时没有问题,但是运行时有问题,因为运行时this已经指向dom节点,而非class对象实例,所以this.onMouseMove和this.onMouseUp是undefined,而不是一开始绑定的那两个函数
this.dom.removeEventListener('mousemove', this.onMouseMove)
this.dom.removeEventListener('mouseup', this.onMouseUp)
}
this.dom.addEventListener('mousemove', this.onMouseMove.bind(this), false)
this.dom.addEventListener('mouseup', this.onMouseUp.bind(this), false)
this.dom.removeEventListener('mousemove', this.onMouseMove.bind(this)) // this.onMouseMove.bind(this)不是当初绑定的那个函数
this.dom.removeEventListener('mouseup', this.onMouseUp.bind(this)) // this.onMouseUp.bind(this)不是当初绑定的那个函数