//手写eventhub(发布订阅)
// 核心思路:1.使用一个对象作为缓存
// 2.on负责把方法发布到缓存的eventName数组中
// 3.emit负责遍历eventName中的方法数组
// 4.off负责清除缓存中的方法
class EventHub {
cache={}
on(eventName,fn){
this.cache[eventName]=this.cache[eventName]||[]
this.cache[eventName].push(fn)
}
emit(eventName){
this.cache[eventName]=this.cache[eventName]||[]
this.cache[eventName].forEach(fn=>fn())
}
off(eventName,fn){
const index=this.cache[eventName].indexOf(fn);
if(index>-1){
this.cache[eventName][index]=null
}
}
}
function fnn(){
console.log("执行发布订阅了奥");
}
let ev=new EventHub();
ev.on("test",fnn)
ev.emit("test");
ev.off("test",fnn);