添加&删除具有绑定到外部作用域的函数的事件侦听器

时间:2016-03-11 10:53:41

标签: javascript frontend addeventlistener

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

window.addEventListener('keyup', myFunction, false);
window.removeEventListener('keyup', myFunction, false);

像魅力一样,但问题出现了: 我在一个类里面,在 myFunction 里面我想调用类成员和一些类方法,通常绑定到 this ,但是嘿 - 在addEventListener里面-method,绑定到 window 。将class-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);
      }
   }
}

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

1 个答案:

答案 0 :(得分:0)

看起来应该是这样的:

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