发布订阅模式通过EventEmitter类实现事件的监听与触发,核心是维护事件名与回调函数的映射表;支持on订阅、emit发布、off取消订阅;同一事件可绑定多个回调,解耦事件发送者与接收者,适用于组件通信和状态通知等场景。

发布订阅模式是一种常见的设计模式,常用于解耦事件的发送者和接收者。在JavaScript中,这种模式特别适合处理组件间的通信、事件管理等场景。下面是一个简单但实用的发布订阅模式实现。
核心是维护一个事件名称与回调函数的映射表。通过on监听事件,emit触发事件,off移除监听。
class EventEmitter { constructor() { this.events = {}; } // 订阅事件 on(eventName, callback) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(callback); } // 发布事件(触发) emit(eventName, data) { if (this.events[eventName]) { this.events[eventName].forEach(callback => callback(data)); } } // 取消订阅 off(eventName, callback) { if (!this.events[eventName]) return; const updatedCallbacks = this.events[eventName].filter(cb => cb !== callback); this.events[eventName] = updatedCallbacks; } }定义一个事件中心实例,然后注册监听并触发事件。
// 创建实例 const eventBus = new EventEmitter(); // 监听用户登录事件 eventBus.on('login', (user) => { console.log(`欢迎 ${user.name} 登录`); }); eventBus.on('login', (user) => { console.log(`记录日志:${user.name} 在 ${new Date().toLocaleTimeString()} 登录`); }); // 触发登录事件 eventBus.emit('login', { name: 'Alice' }); // 移除某个监听(需保留引用) const greet = (user) => { console.log(`打招呼:${user.name}`); }; eventBus.on('login', greet); eventBus.off('login', greet); // 取消该监听以上就是使用JavaScript实现一个简单的发布订阅模式_js设计模式的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号