class Event { constructor(name) { this.name = name this.callbacks = [] } registerCallback(callback) { this.callbacks.push(callback) } } class Reactor { constructor() { this.events = {} } registerEvent(eventName) { this.events[eventName] = new Event(eventName) } dispatchEvent(eventName, ...eventArgs) { this.events[eventName].callbacks.forEach(callback => callback(...eventArgs)) } on(eventName, callback) { if(!this.events[eventName]) this.registerEvent(eventName) this.events[eventName].registerCallback(callback) } }