findme-miniprogram-frontend/utils/event-emitter.js
2025-12-27 17:16:03 +08:00

63 lines
1.2 KiB
JavaScript

/**
* 事件发射器基类
* 提供事件订阅和发布机制
*/
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;