/** * 事件发射器基类 * 提供事件订阅和发布机制 */ class EventEmitter { constructor() { this.events = {}; } /** * 注册事件监听器 * @param {string} event - 事件名称 * @param {Function} listener - 监听器函数 */ on(event, listener) { if (!this.events[event]) { this.events[event] = []; } this.events[event].push(listener); } /** * 移除事件监听器 * @param {string} event - 事件名称 * @param {Function} listener - 监听器函数(可选) */ off(event, listener) { if (!this.events[event]) return; if (listener) { this.events[event] = this.events[event].filter(l => l !== listener); } else { delete this.events[event]; } } /** * 触发事件 * @param {string} event - 事件名称 * @param {*} data - 事件数据 */ emit(event, data) { if (!this.events[event]) return; this.events[event].forEach(listener => { try { listener(data); } catch (error) { console.error(`事件监听器执行失败 [${event}]:`, error); } }); } /** * 清空所有事件监听器 */ removeAllListeners() { this.events = {}; } } module.exports = EventEmitter;