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