class EventPubSub{
constructor(){
this.event = {};
}
//订阅
on(type, callback){
if(!this.event[type]){
this.event[type] = [callback];
}else{
this.event[type].push(callback);
}
}
//解除订阅
off(type, callback){
if(!this.event[type]){
return;
}
this.event[type] = this.event[type].filter(item => {
return item != callback;
})
}
//发布
emit(type, ..args){
if(!this.event[type]){
return;
}
this.event[type].forEach(callback => {
callback.apply(this, args);
})
}
//执行一次
once(type, callback){
function f(){
callback();
this.off(type, f);
}
this.on(type, f);
}
}
// 使用如下
// const event = new EventEmitter();
// const handle = (...rest) => {
// console.log(rest);
// };
// event.on("click", handle);
// event.emit("click", 1, 2, 3, 4);
// event.off("click", handle);
// event.emit("click", 1, 2);
// event.once("dbClick", () => {
// console.log(123456);
// });
// event.emit("dbClick");
// event.emit("dbClick");