JS 巧实现发布 - 订阅模式:EventEmitter 与 Listener 类全解析
以下是使用 JavaScript 实现的发布-订阅模式: ```javascript class EventEmitter { constructor() { this.events = {}; } on(eventName, listener) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(listener); } emit(eventName, data) { if (this.events[eventName]) { this.events[eventName].forEach(listener => listener(data)); } } off(eventName, listener) { if (this.events[eventName]) { this.events[eventName] = this.events[eventName].filter(l => l!== listener); } } } class Listener { handle(data) { console.log(`Received data: ${data}`); } } // 测试代码 const emitter = new EventEmitter(); const listener1 = new Listener(); const listener2 = new Listener(); emitter.on('event1', listener1.handle); emitter.on('event1', listener2.handle); emitter.emit('event1', 'Hello, World!'); emitter.off('event1', listener1.handle); emitter.emit('event1', 'Goodbye!'); ``` ######[AI写代码神器 | 301点数解答 | 2024-11-08 10:26:43]
- 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)119
- Python 实现:EventEmitter 与 Listener 构建简单发布 - 订阅模式 (字节豆包 | 215点数解答 | 2024-11-08 22:20:55)148
- JavaScript 实现:EventEmitter 与 Listener 构建简单发布 - 订阅模式(字节豆包 | 209点数解答 | 2024-11-08 22:33:35)142
- Python 实现带取消注册功能的发布 - 订阅模式:EventEmitter 与 Listener 类详解 (字节豆包 | 316点数解答 | 2024-11-09 00:54:20)154
- JavaScript:实现支持多监听器与取消注册的发布 - 订阅模式(字节豆包 | 320点数解答 | 2024-11-09 00:55:08)211
- Python 实现带取消注册功能的简单发布 - 订阅模式:EventEmitter 与 Listener 类详解(百度文心 | 809点数解答 | 2024-11-09 22:17:06)127
- 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