>[danger]实现一个eventBus(发布订阅) 下面是一个简单的事件总线(EventBus)的实现,用于实现发布订阅模式: ```javascript class EventBus { constructor() { this.events = {}; } // 订阅事件 subscribe(eventName, callback) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(callback); } // 发布事件 publish(eventName, data) { const eventCallbacks = this.events[eventName]; if (eventCallbacks) { eventCallbacks.forEach(callback => { callback(data); }); } } // 取消订阅事件 unsubscribe(eventName, callback) { const eventCallbacks = this.events[eventName]; if (eventCallbacks) { this.events[eventName] = eventCallbacks.filter(cb => cb !== callback); } } } ``` 使用示例: ```javascript // 创建事件总线实例 const eventBus = new EventBus(); // 定义事件订阅回调函数 function callback1(data) { console.log("Callback 1:", data); } function callback2(data) { console.log("Callback 2:", data); } // 订阅事件 eventBus.subscribe("event1", callback1); eventBus.subscribe("event2", callback2); // 发布事件 eventBus.publish("event1", "Hello, Event 1!"); eventBus.publish("event2", "Hello, Event 2!"); // 取消订阅事件 eventBus.unsubscribe("event1", callback1); // 再次发布事件 eventBus.publish("event1", "This callback should not be called"); eventBus.publish("event2", "Hello again, Event 2!"); ``` 在上述示例中,首先创建了一个事件总线实例`eventBus`,然后定义了两个回调函数`callback1`和`callback2`用于订阅事件。接下来通过`subscribe()`方法将回调函数订阅到相应的事件上,然后使用`publish()`方法发布事件并传递相应的数据。最后,通过`unsubscribe()`方法可以取消订阅事件。 当发布事件时,所有订阅了该事件的回调函数都会被执行,并传递相应的数据。取消订阅后,对应的回调函数就不会再被执行。