1、发布-订阅是一种消息范式,通过定义发布者、订阅者、调度中心来完成消息通信。
const eventHub = {
map: {},
on(name, fn) {
this.map[name] = this.map[name] || [];
this.map[name].push(fn);
console.log(this.map, 'map')
},
emit(name, data) {
const e = this.map[name];
if (!e) return;
// e.map(f=>f.call(null,data));
e.map(f => f(data));
},
off(name, fn) {
const e = this.map[name];
if (!e) return;
const index = e.indexOf(fn);
if (index < 0) return;
e.splice(index, 1);
},
once(name, fn) {
const f = (args)=> {
this.off(name, fn);
fn(args)
}
this.on(name, f)
},
clear() {
this.map = {};
}
}
2、使用
//使用
eventHub.on('click', console.log)
eventHub.emit('click', 'test');
eventHub.once('test', console.error);
eventHub.emit('test', 'error')