Javascript 实现 EventBus

16 阅读1分钟

使用JavaScript实现一个EventBus。首先EventBus的基本概念,它是一个事件总线,用于不同组件或模块之间的通信,通过发布-订阅模式实现。

class EventBus {
    constructor() {
        this.events = {};
    }

    on(event, callback) {
        if (!this.events[event]) {
            this.events[event] = []
        }
        this.events[event].push(callback);
    }

    emit(event, ...args) {
        const callbacks = this.events[event];
        if (callbacks) {
            callbacks.forEach((callback) => {
                callback(...args);
            });
        }
    }

    off(event, callback) {
        const callbacks = this.events[event];
        if (callbacks) {
            this.events[event] = callbacks.filter((_callback) => _callback !== callback);
        }
    }

    once(event, callback) {
        const _callback = (...args) => {
            callback(...args);
            this.off(event, _callback);
        };
        this.on(event, _callback);
    }
}