constructor(){
this.list={}
}
on(name,fn){
if(this.list[name]){
this.list[name].push({fn:fn,once:false})
}else{
this.list[name] = [{fn:fn,once:false}]
}
}
emit(name,...data){
if(this.list[name]){
let arr = this.list[name]
if(arr.length>0){
arr.forEach((item,index) => {
item.fn(...data)
if(item.once){
delete this.list[name][index]
}
});
}
}
}
off(name,fn){
if(this.list[name]){
if(fn){
while(this.list[name].findIndex(item=>item.fn==fn)!=-1){
this.list[name].splice(this.list[name].findIndex(item=>item.fn==fn),1)
}
}else{
this.list[name]=[]
}
}
}
once(name,fn){
if(this.list[name]){
if(!fn){
this.list[name]=null
}else{
let index = this.list[name].findIndex(item=>item.fn==fn)
if(index!=-1){
console.log(this.list[name],index)
this.list[name][index].once = true
}else{
this.list[name].push({fn:fn,once:true})
}
}
}
}
}
let a=(res)=>{
console.log('this.is.on1')
}
let bus = new eventBus()
bus.on('key',a)
bus.once('key',res=>{
console.log('this is once')
})
bus.on('key',(res)=>{
console.log('this.is.on2')
})
bus.off('key',a)
bus.emit('key','123')
bus.emit('key',456)
```class eventBus{
constructor(){
this.list={}
}
on(name,fn){
if(this.list[name]){
this.list[name].push({fn:fn,once:false})
}else{
this.list[name] = [{fn:fn,once:false}]
}
}
emit(name,...data){
if(this.list[name]){
let arr = this.list[name]
if(arr.length>0){
arr.forEach((item,index) => {
item.fn(...data)
if(item.once){
delete this.list[name][index]
}
});
}
}
}
off(name,fn){
if(this.list[name]){
if(fn){
while(this.list[name].findIndex(item=>item.fn==fn)!=-1){
this.list[name].splice(this.list[name].findIndex(item=>item.fn==fn),1)
}
}else{
this.list[name]=[]
}
}
}
once(name,fn){
if(this.list[name]){
if(!fn){
this.list[name]=null
}else{
let index = this.list[name].findIndex(item=>item.fn==fn)
if(index!=-1){
console.log(this.list[name],index)
this.list[name][index].once = true
}else{
this.list[name].push({fn:fn,once:true})
}
}
}
}
}
let a=(res)=>{
console.log('this.is.on1')
}
let bus = new eventBus()
bus.on('key',a)
bus.once('key',res=>{
console.log('this is once')
})
bus.on('key',(res)=>{
console.log('this.is.on2')
})
bus.off('key',a)
bus.emit('key','123')
bus.emit('key',456)