如何在JS中实现一个发布订阅
在 JavaScript 中,实现一个发布-订阅(Pub/Sub)模式可以通过创建一个类,维护事件与回调函数的映射关系。下面是一个简洁且实用的实现:
✅ 简单版本(基础实现)
javascript
class PubSub {
constructor() {
this.events = {};
}
// 订阅
subscribe(event, callback) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(callback);
}
// 发布
publish(event, data) {
const callbacks = this.events[event];
if (callbacks && callbacks.length) {
callbacks.forEach(cb => cb(data));
}
}
// 取消订阅
unsubscribe(event, callback) {
if (!this.events[event]) return;
this.events[event] = this.events[event].filter(cb => cb !== callback);
}
}
✅ 使用示例
javascript
const pubsub = new PubSub();
function callbackA(data) {
console.log('Callback A received:', data);
}
function callbackB(data) {
console.log('Callback B received:', data);
}
// 订阅事件
pubsub.subscribe('update', callbackA);
pubsub.subscribe('update', callbackB);
// 发布事件
pubsub.publish('update', { msg: '数据更新了!' });
// 取消订阅
pubsub.unsubscribe('update', callbackB);
// 再次发布
pubsub.publish('update', { msg: '再次更新,只触发 A' });
🔍 输出结果
javascript
Callback A received: { msg: '数据更新了!' }
Callback B received: { msg: '数据更新了!' }
Callback A received: { msg: '再次更新,只触发 A' }