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(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;
}
}
}
}