dede网站后台导入文档,宜宾网站开发招聘,用ipv6地址做网站访问,站长之家网站介绍发布者和订阅者完全解耦#xff08;通过消息队列进行通信#xff09; 适用场景#xff1a;功能模块间进行通信#xff0c;如Vue的事件总线。 ES6实现方式#xff1a;
class eventManager {constructor() {this.eventList {};}on(eventName, callback) {if (this.eventL…发布者和订阅者完全解耦通过消息队列进行通信 适用场景功能模块间进行通信如Vue的事件总线。 ES6实现方式
class eventManager {constructor() {this.eventList {};}on(eventName, callback) {if (this.eventList[eventName]) {this.eventList[eventName].push(callback);} else {this.eventList[eventName] [callback];}}fire(eventName, data) {if (eventName in this.eventList Array.isArray(this.eventList[eventName])) {this.eventList[eventName].forEach(callback callback(data));} else {console.log(${eventName} is not a resgisted event);}}off(eventName, callback) {if (callback) {if (eventName in this.eventList Array.isArray(this.eventList[eventName])) {let index this.eventList[eventName].indexOf(callback);index -1 this.eventList[eventName].splice(index, 1);} else {console.log(${eventName} has not been listen);}} else {delete this.eventList[eventName]}}
}
let eventManager1 new eventManager();
eventManager1.on(event, data {console.log(data);
});
eventManager1.fire(event, haha);
eventManager1.off(event);