发布订阅者模式解析

244 阅读1分钟

发布订阅者模式是面试中常见的问题之一, 以下是本人写的, 供大家参考, 如果有误多多留言哈...

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);
        }
    }
}

``