编辑代码

class EE {
  constructor(){
  	this.events = {};
  }
  emit(name, ...params) {
	let funcs = this.events[name];
    if(Array.isArray(funcs)){
    	funcs.forEach(fn=>{
        	fn(params);
        })
    }
    return this
  }

  // once 指只通知一次
  once(name, func) {
    function oneFn(){
    	func.apply(this,arguments);
      	this.off(name,oneFn);
    }
    this.on(name,oneFn);
  }
  
  on(name, func) {
	if(!this.evennts[name]){
    	this.events[name] = [func]
    }else{
    	this.events[name].push(func);
    }
  }

  off(name, func) {
	let funcs = this.events[name];
    if(Array.isArray(funcs)){
    	if(func){
        	let fnIndex = funcs.indexOf(func);
          	fnIndex!==-1 && (funcs.splice(fnIndex,1))
        }else{
        	funcs.length = 0;
        }
    }
  }
}