class ObserverPattern{
constructor() {
this.eventQueue = {};
}
on(name,func){
if(!(name in this.eventQueue)) this.eventQueue[name] = [];
this.eventQueue[name].push(func);
}
once(name,func){
if(name in this.eventQueue)return;
this.eventQueue[name] = [func];
}
emit(name,args){
this.checkEvent(name);
let event_l = this.eventQueue[name].length;
for(let i = 0;i < event_l; i++){
this.eventQueue[name][i](args);
}
}
remove(name,func){
this.checkEvent(name);
this.eventQueue[name].splice(this.eventQueue[name].indexOf(func),1);
}
removeAll(name){
this.checkEvent(name);
delete this.eventQueue[name];
}
checkEvent(name){
if(!(name in this.eventQueue)) throw Error("This event is not registered:" + name);
}
}
复制代码