Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除类中的eventListener?_Javascript_Class_Ecmascript 6 - Fatal编程技术网

Javascript 如何删除类中的eventListener?

Javascript 如何删除类中的eventListener?,javascript,class,ecmascript-6,Javascript,Class,Ecmascript 6,我已尝试了以下两个版本,但无法删除mousemove eventListener。我认为我对类内部作用域的理解有限导致了一些混乱,但我认为这应该是可行的 export class Line extends Graphic { constructor() { super() } handleMouseMoveWhileDrawing(e) { console.log(e); } stopDrawing() { document.removeEvent

我已尝试了以下两个版本,但无法删除mousemove eventListener。我认为我对类内部作用域的理解有限导致了一些混乱,但我认为这应该是可行的

export class Line extends Graphic {
  constructor() {
    super()
  }

  handleMouseMoveWhileDrawing(e) {
    console.log(e);
  }

  stopDrawing() {
    document.removeEventListener('mouseup', this.stopDrawing)
    document.removeEventListener('mousemove', this.handleMouseMoveWhileDrawing)
  }

  startDrawing() {
    document.addEventListener('mousemove', this.handleMouseMoveWhileDrawing)
    document.addEventListener('mouseup', this.stopDrawing)
  }
}

new Line().startDrawing()

任何帮助都将不胜感激。

@epascarello将我推向了正确的方向

将回调传递给eventListener时,此参数将自动设置为eventListener附加到的DOM元素。因此,stopDrawing方法内的this.handleMouseMoveWhileDrawing返回未定义

我可以通过使用.bind覆盖stopDrawing方法中的this来解决此问题:


问题是,到底是什么东西不适合您的代码?
export class Line extends Graphic {
  constructor() {
    super()
    this.handleMouseMoveWhileDrawing = function(e) {
      console.log(e);
    }
  }

  stopDrawing() {
    document.removeEventListener('mouseup', this.stopDrawing)
    document.removeEventListener('mousemove', this.handleMouseMoveWhileDrawing)
  }

  startDrawing() {
    document.addEventListener('mousemove', this.handleMouseMoveWhileDrawing)
    document.addEventListener('mouseup', this.stopDrawing)
  }
}

new Line().startDrawing()
document.addEventListener('mouseup', this.stopDrawing.bind(this))