event-bus发布订阅实现

一个简单的实现了事件注册,订阅,注销的eventEmeitter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class EventEmeitter{
constructor(){
this._events = new Map()
}
emit(type,context,...args){
const handler = this._events.get(type)
if(typeof handler !== 'function'){
throw Error(`[${type}] 未绑定事件`)
}
if(args.length >= 3){
handler.apply(context,args)
}else{
handler.call(context,...args)
}
}
addEventListener(type,fn){
if(!this._events.get(type)){
this._events.set(type,fn)
console.log(`[${type}] 事件绑定`)
}else{
throw Error(`[${type}] 事件已绑定`)
}
}
removeEventListener(type){
this._events.delete(type)
console.log(`[${type}] 事件移除`)
}
}

const emitter = new EventEmeitter()
emitter.addEventListener('christmas',s=>{
console.log(`Merry ${s}`)
})
emitter.emit('christmas',this,'Christmas')
emitter.removeEventListener('Christmas')

---
[christmas] 事件绑定
Merry Christmas
[Christmas] 事件移除