class EventDispatcher { constructor() { this.listeners_ = []; } dispatch(eventName, event = null) { if (!this.listeners_[eventName]) return; const ls = this.listeners_[eventName]; for (let i = 0; i < ls.length; i++) { ls[i](event); } } on(eventName, callback) { if (!this.listeners_[eventName]) this.listeners_[eventName] = []; this.listeners_[eventName].push(callback); } off(eventName, callback) { if (!this.listeners_[eventName]) return; const ls = this.listeners_[eventName]; for (let i = 0; i < ls.length; i++) { if (ls[i] === callback) { ls.splice(i, 1); return; } } } } module.exports = EventDispatcher;