酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]