发布订阅者模式是面试中常见的问题之一, 以下是本人写的, 供大家参考, 如果有误多多留言哈...
class EventEmitter {
constructor() {
this.events = {};
}
// 注册事件监听器
on(event, listener) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(listener);
}
// 触发事件,发布消息
emit(event, ...args) {
if (this.events[event]) {
this.events[event].forEach(listener => listener(...args));
}
}
// 注册一次性监听器
once(event, listener) {
const onceListener = (...args) => {
listener(...args);
this.off(event, onceListener); // 调用后移除监听器
};
this.on(event, onceListener);
}
// 移除监听器
off(event, listener) {
if (this.events[event]) {
this.events[event] = this.events[event].filter(l => l !== listener);
}
}
}
``