如何在我的 javascript class (ES6) 中实现事件处理程序

How to implement on-event handler in my javascript class (ES6)

如何在 class 中创建自己的 "on" 事件处理程序? 例如,WebSocket 有多个 "on" 事件处理程序,如下所示。

var ws = new WebSocket("wss://localhost:1000/hoge");
ws.connect();
ws.onopen = function(e){
    //TO DO once connection get established
}
ws.onmessage = function(e){
    // TO DO once message comes from server sie
}

这可能是个愚蠢的问题,但我想为上面的内容提供简单的示例代码。

使这些属性成为 getter 和 setter:

class Foo {
  get onsomeevent() {
    return this._someeventHandler;
  }
  set onsomeevent(newVal) {
    this._someeventHandler = newVal;
  }
  trigger() {
    if (this._someeventHandler) {
      this._someeventHandler();
    }
  }
}
const f = new Foo();
f.onsomeevent = () => console.log('handler running');
console.log('about to trigger');
f.trigger();
console.log(f.onsomeevent);

假设您想要 ws.ongameover 并且希望在游戏结束时调用它。

你可以像这样简单地编写代码:

// assign your function to the ws.ongameover property
ws.ongameover = function() {
    console.log("game over");
}

然后,在您看到游戏实际结束的代码中的其他地方,您可以像这样触发它:

// if there's a gameover handler, then call it
if (ws.ongameover) {
   ws.ongameover();
}

请注意,使用事件和事件处理程序通常是一种更好的设计模式,因为它更具可扩展性,因为您可以为同一事件设置多个侦听器,并且各个代码段可以添加或删除自己的侦听器。在浏览器中,它们使用 addEventListener() and in node.js, they use the EventEmitter class 接口(两者在概念上相似)。无论使用哪一种,您都可以创建自己的事件名称,代码可以侦听这些事件名称,然后其他代码可以在这些事件发生时触发它们。