Как реализовать обработчик событий в моем классе javascript (ES6) - PullRequest
0 голосов
/ 10 апреля 2020

Как я могу создать свой собственный обработчик событий "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
}

Это может быть глупым вопросом, но я хотел бы иметь простой пример кода для вышеупомянутого.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Допустим, вы хотели получить 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(), а в node.js они используют интерфейс класса EventEmitter (оба схожи по концепции). С помощью любого из них вы можете создавать свои собственные имена событий, код может прослушивать эти имена событий, а затем другой код может запускать эти события, когда они происходят.

0 голосов
/ 10 апреля 2020

Сделать эти свойства геттерами и сеттерами:

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);
...