如何给监听事件的外部回调函数传递this和e?

新手上路,请多包涵

相关代码

 constructor() {
    var _this = this;
    window.addEventListener("keydown", _this.keyDownEvent(event, _this), false);
  }

  keyDownEvent(e, _this) {
    console.log(e.keyCode)        
  }

找了一天相关的问题,实在是没有找到解决方法,求大佬帮忙看下。
我试过e、event、this.event都报错了
Uncaught TypeError: Cannot read properties of undefined (reading 'keyCode')
因为需要用到keyCode,请问有什么办法可以解决吗?(可以的话,请使用原生代码。)

阅读 1.9k
2 个回答
constructor() {
    this.keyDownEvent = this.keyDownEvent.bind(this);
    window.addEventListener("keydown", this.keyDownEvent, false);
}

keyDownEvent(e) {

    console.log(e.keyCode)
}

把keyDownEvent放在匿名函数里面就行了

  class demo {
    constructor() {
      var _this = this;
      window.addEventListener("keydown", function (event) {
        _this.keyDownEvent(event, _this)
      }, false);
    }

    keyDownEvent (e, _this) {
      console.log(e.keyCode)
    }
  }
  let d = new demo()

image.png

匿名函数改为箭头函数更方便:

 class demo {
    constructor() {
      window.addEventListener("keydown",  (event) => {
        this.keyDownEvent(event, this)
      }, false);
    }

    keyDownEvent (e, _this) {
      console.log(e.keyCode, _this)
    }
  }
  let d = new demo()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题