/** * 独立事件分发工具类 * * @example * const event = new EventBus(); * event.on(() => { * console.log('trigger') * }) * event.fire(); */ export class EventBus { listeners: ((...args: Args) => void)[] = []; fire(...args: Args) { this.listeners.forEach((fn) => { fn(...args); }); } on(fn: (...args: Args) => void) { this.listeners.push(fn); } off(fn: (...args: Args) => void) { const index = this.listeners.indexOf(fn); if (index >= 0) { this.listeners.splice(index, 1); } } }