发布订阅要素
- 缓存队列,存放订阅者信息
- 具有增加、删除订阅的能力
- 状态改变时通知所有订阅者执行监听
模拟实现
class PubSub {
constructor() {
this._events = {};
}// 注册
subScribe(event, cb) {
if (this._events[event]) {
// 如果当前event存在,所以我们只需要往后添加当前次监听操作
this._events[event].push(cb);
} else {
// 之前没有订阅过此事件
this._events[event] = [cb];
}
}// 发布
publish(event, ...args) {
const items = this._events[event];
if (items && items.length) {
items.forEach(function (cb) {
cb.call(this, ...args);
});
}
}
}let ps = new PubSub();
ps.subScribe("event1", () => {
console.log("event1 do");
});
ps.subScribe("event1", () => {
console.log("event1 do-----");
});
ps.publish("event1");
ps.publish("event1");