JS 实现发布 - 订阅模式:EventEmitter 与 Listener 类详解
```javascript class EventEmitter { constructor() { this.events = {}; } on(event, listener) { if (!this.events[event]) { this.events[event] = []; } this.events[event].push(listener); } off(event, listenerToRemove) { if (!this.events[event]) return; this.events[event] = this.events[event].filter(listener => listener !== listenerToRemove); } emit(event, data) { const listeners = this.events[event]; if (listeners && listeners.length) { listeners.forEach(listener => { listener.handle(data); }); } } } class Listener { constructor(name) { this.name = name; } handle(data) { console.log(`${this.name} received: ${data}`); } } // Example usage: const emitter = new EventEmitter(); const listener1 = new Listener('Listener1'); const listener2 = new Listener('Listener2'); emitter.on('event1', listener1); emitter.on('event1', listener2); emitter.emit('event1', 'Hello World!'); // Both listeners will be triggered emitter.off('event1', listener1); // Remove listener1 from event1 emitter.emit('event1', 'Hello again!'); // Only listener2 will be triggered now ``` 这段代码定义了一个简单的发布-订阅模式,其中 `EventEmitter` 类用于管理事件和监听器,而 `Listener` 类则代表具体的事件处理者。通过 `on` 方法注册监听器,通过 `emit` 方法触发事件,并通过 `off` 方法取消注册特定的监听器。 ######[AI写代码神器 | 465点数解答 | 2024-11-08 10:27:23]
- Python 实现支持多监听器与取消注册的发布 - 订阅模式(字节豆包 | 338点数解答 | 2024-11-08 10:26:15)145
- JS 巧实现发布 - 订阅模式:EventEmitter 与 Listener 类全解析(字节豆包 | 301点数解答 | 2024-11-08 10:26:43)252
- JS 实现发布 - 订阅模式:EventEmitter 与 Listener 类详解(讯飞星火 | 465点数解答 | 2024-11-08 10:27:23)120
- Python 实现:EventEmitter 与 Listener 构建简单发布 - 订阅模式 (字节豆包 | 215点数解答 | 2024-11-08 22:20:55)149
- JavaScript 实现:EventEmitter 与 Listener 构建简单发布 - 订阅模式(字节豆包 | 209点数解答 | 2024-11-08 22:33:35)143
- Python 实现带取消注册功能的发布 - 订阅模式:EventEmitter 与 Listener 类详解 (字节豆包 | 316点数解答 | 2024-11-09 00:54:20)155
- JavaScript:实现支持多监听器与取消注册的发布 - 订阅模式(字节豆包 | 320点数解答 | 2024-11-09 00:55:08)212
- Python 实现带取消注册功能的简单发布 - 订阅模式:EventEmitter 与 Listener 类详解(百度文心 | 809点数解答 | 2024-11-09 22:17:06)128
- JavaScript 实现支持多监听器及取消注册的发布 - 订阅模式(字节豆包 | 308点数解答 | 2024-11-09 22:50:45)124
- "Debugging 'Cannot Read Properties of Null (reading \'userid\')' Error in Vue Components: Steps and Example"(讯飞星火 | 614点数解答 | 2024-11-28 14:31:57)282
- HTML+jQuery 实现列表元素悬停动画效果:代码详解与注意事项(字节豆包 | 475点数解答 | 2024-12-19 14:58:05)382
- HTML+jQuery:打造动态导航栏动画效果及注意事项(字节豆包 | 495点数解答 | 2024-12-19 14:58:06)329