Javascript 在JS类中调用方法返回“…不是函数”

Javascript 在JS类中调用方法返回“…不是函数”,javascript,addeventlistener,keydown,Javascript,Addeventlistener,Keydown,我有一个JS类,它的方法如下: setupComponent() { document.getElementById("message-input").addEventListener("keydown", this._onKeyPress); document.getElementById("send-button").addEventListener("click", this._onSend); } 在它下面,有两种方法: _onKeyPress(event)

我有一个JS类,它的方法如下:

  setupComponent() {
    document.getElementById("message-input").addEventListener("keydown", this._onKeyPress);
    document.getElementById("send-button").addEventListener("click", this._onSend);
  }
在它下面,有两种方法:

  _onKeyPress(event) {
    if (event.code === "Enter") {
      this._onSend();
    }
  }

  _onSend() {  
     console.log("send");
  }
我的问题是:为什么来自click eventListener的直接调用有效?它记录消息,而在_onKeyPress中调用的这个。_onSend方法返回这个。_onSend不是一个函数

也可以使用此选项。在setupComponent中运行


这是与eventListeners相关联的一种魔力吗?

当函数用作事件处理程序时,它的this设置为从中激发事件的元素。因此,您不能期望您的方法存在,但可以使用function.prototype.bind将此绑定到您的函数


神奇的是,这并不总是意味着你认为它意味着什么。我认为这可能是一个问题,但为什么它在这里工作:它看起来非常相似。编辑:另请点击此处:
document.getElementById("message-input")
      .addEventListener("keydown", this._onKeyPress.bind(this));