Homemade event emmiter


export class myEmmiter{ constructor(){
this.listeners =[]; this.laterListeners = []; } on(event,func){ if(!this.listeners[event]){ this.listeners[event] = []; } if(this.laterListeners.length >0){ //在有listener之前有emmit的情况 this.listeners[event].push(func); this.laterListeners.forEach((item)=>{ this.emit(item.event,item.message) }) } this.listeners[event].push(func); } emit(event,message){ if(!this.listeners[event]){ //如果未注册emit了,保存起来先 let later = { event:event, message: message } this.laterListeners.push(later); return; } if(this.listeners[event].length >0){ this.listeners[event].forEach(element => { if(message){ element(message) } }); } } }
//做个单例 let emmiter; export
function getEmmiter(){ if(!emmiter){ emmiter = new myEmmiter(); } return emmiter; } export const eventEmmiter = getEmmiter();

 

Guess you like

Origin www.cnblogs.com/xinfangzhang/p/11417255.html