Javascript 添加&;移除函数绑定到外部作用域的事件侦听器

Javascript 添加&;移除函数绑定到外部作用域的事件侦听器,javascript,frontend,addeventlistener,Javascript,Frontend,Addeventlistener,有个棘手的问题。我想使用addEventListener和removeEventListener,使用一个注册的非匿名函数。我不想使用匿名函数,因为我想明确地销毁我首先注册的事件侦听器: window.addEventListener('keyup', myFunction, false); window.removeEventListener('keyup', myFunction, false); 工作起来很有魅力,但问题来了: 我在一个类和myFunction的内部,我想调用类成员和一些

有个棘手的问题。我想使用addEventListener和removeEventListener,使用一个注册的非匿名函数。我不想使用匿名函数,因为我想明确地销毁我首先注册的事件侦听器:

window.addEventListener('keyup', myFunction, false);
window.removeEventListener('keyup', myFunction, false);
工作起来很有魅力,但问题来了: 我在一个类和myFunction的内部,我想调用类成员和一些类方法,通常绑定到这个,但是嘿-在addEventListener方法内部,它绑定到窗口。将类this绑定到函数(例如myFunction.bind(this)等)的每次尝试都没有成功。那么我如何访问类范围呢

class myClass {
   myMethod(args) {
     console.log('you got them superior coding skillz');
   }

   myCallback(e) {
      var key = e.keyCode ? e.keyCode : e.which;
      if(key ===  27) {
        this.myMethod(args);
      }
   }

   listeners(addListener) {
      if(addListener === true) {
         window.addEventListener('keyup', this.myCallback, false);
      }
      else {
         window.removeEventListener('keyup', this.myCallback, false);
      }
   }
}

谢谢你们的帮助!非常感谢。

应该是这样的:

window.addEventListener('keyup', this.myCallback.bind(this), false)

应该是这样的:

window.addEventListener('keyup', this.myCallback.bind(this), false)

已经试过了,但不起作用!bind(this)将以某种方式操作函数,removeEventListener将无法识别它。能否在bind后的回调中添加“console.log(JSON.stringify(this))?不是,该绑定不起作用。是的,给了我类的作用域,但是-removeEventListener不起作用,因为它不会识别myCallback是addEventListener使用的同一个函数。但是它们都有相同的作用域,你确定在你说的话中吗?是的,因为我已经测试过很多次了-并且侦听器不会被破坏。已经尝试过了,但它不起作用!bind(this)将以某种方式操作函数,removeEventListener将无法识别它。能否在bind后的回调中添加“console.log(JSON.stringify(this))?不是,该绑定不起作用。是的,给了我类的作用域,但是-removeEventListener不起作用,因为它不会识别myCallback是addEventListener使用的同一个函数。但是它们都有相同的作用域,你确定在你说的话中吗?是的,因为我已经测试过很多次了-而且侦听器不会被破坏。