通过class 实现 发布订阅

以下是使用JavaScript创建一个具有发布和订阅功能的类,并通过getter和setter方法实现:

class PubSub {
constructor() {
this.subscribers = {}; this.data = {};
}
subscribe(event, callback) {
if (!(event in this.subscribers)) {
this.subscribers[event] = [];
}
this.subscribers[event].push(callback);
}
unsubscribe(event, callback) {
if (!(event in this.subscribers)) {
return;
}
const index = this.subscribers[event].indexOf(callback);
if (index > -1) {
this.subscribers[event].splice(index, 1);
}
}
publish(event, value) {
this.data[event] = value;
if (!(event in this.subscribers)) { return; }
this.subscribers[event].forEach(callback => { callback(value); });
}
get(event) { return this.data[event]; }
set(event, value) { this.publish(event, value); }
} // 用法示例 const pubsub = new PubSub(); // 订阅事件 pubsub.subscribe('event1', data => { console.log('订阅者1接收到数据:', data); }); pubsub.subscribe('event1', data => { console.log('订阅者2接收到数据:', data); }); pubsub.subscribe('event2', data => { console.log('订阅者3接收到数据:', data); }); // 通过setter发布事件 pubsub.set('event1', 'Hello World'); // 通过getter获取事件数据 const eventData = pubsub.get('event1'); console.log('获取到的数据:', eventData); // 取消订阅 pubsub.unsubscribe('event1', callback1);

 在上述示例中,`PubSub` 类表示一个具有发布-订阅功能的类,并且通过getter和setter方法实现。除了之前提到的三个方法(`subscribe`、`unsubscribe`、`publish`),我们还添加了两个方法: - `get(event)`:使用getter方法获取事件数据。 - `set(event, value)`:使用setter方法发布事件。 通过调用`set`方法来发布事件,同时调用订阅者的回调函数。使用`get`方法来获取特定事件的数据。
posted @ 2023-08-22 21:57  饭宝宝  阅读(141)  评论(0编辑  收藏  举报