JavaScript:实现支持多监听器与取消注册的发布 - 订阅模式
```javascript class Listener { constructor() {} handle(eventData) { console.log(`Received event: ${eventData}`); } } class EventEmitter { constructor() { this.listeners = {}; } on(eventName, listener) { if (!this.listeners[eventName]) { this.listeners[eventName] = []; } this.listeners[eventName].push(listener); } emit(eventName, eventData) { if (this.listeners[eventName]) { for (let listener of this.listeners[eventName]) { listener.handle(eventData); } } } off(eventName, listenerToRemove) { if (this.listeners[eventName]) { this.listeners[eventName] = this.listeners[eventName].filter( (listener) => listener!== listenerToRemove ); } } } // 测试 const emitter = new EventEmitter(); const listener1 = new Listener(); const listener2 = new Listener(); emitter.on('myEvent', listener1); emitter.on('myEvent', listener2); emitter.emit('myEvent', 'Hello, World!'); emitter.off('myEvent', listener1); emitter.emit('myEvent', 'Another message'); ``` ######[AI写代码神器 | 320点数解答 | 2024-11-09 00:55:08]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- Flutter 3.22 发布!更新内容大揭秘,附计数器代码示例(讯飞星火 | 471点数解答 | 2024-05-20 11:30:28)200
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)333
- 无名杀“放逐”技能代码实现:主动技限两回,失技摸牌任你选! (字节豆包 | 528点数解答 | 2025-08-27 23:16:22)102
- Java JFrame 实现多界面跳转:含登录、注册及个人信息管理功能(讯飞星火 | 503点数解答 | 2024-06-06 23:49:29)404
- 超详细!用复杂 HTML 代码打造功能丰富网站,含特色搜索与展示(字节豆包 | 572点数解答 | 2024-11-17 07:58:26)270
- JavaScript 期末上机大作业:从界面一注册到界面二多元功能的精彩实现! (GPT | 641点数解答 | 2024-12-26 15:17:43)243
- JavaScript 期末上机大作业:从注册界面到多功能布局的挑战与实现 (GPT | 217点数解答 | 2024-12-26 15:17:44)202
- JavaScript 期末上机大作业:从注册界面到多功能界面的挑战之旅(GPT | 314点数解答 | 2024-12-26 15:17:46)214
- JavaScript期末上机大作业:打造注册与多功能界面全攻略!(GPT | 572点数解答 | 2024-12-26 15:17:47)231
- Vue 3 实现浅蓝色登录页面:精美布局与实用功能全解析(字节豆包 | 333点数解答 | 2025-03-07 08:31:30)215
- 超详细!含前端验证逻辑及注意要点的注册页面HTML代码解析(百度文心 | 1841点数解答 | 2025-06-15 18:07:04)153