定义EventEmitter
class EventEmitter {
constructor() {
this.subs = {}
}
on(event,cb) {
(this.subs[event] || (this.subs[event] = [])).push(cb)
}
emit(event,...args) {
this.subs[event] && this.subs[event].forEach(cb => {
cb(...args)
});
}
once(event,onceCb) {
this.on(event,(...args) => {
onceCb(...args)
this.off(event,onceCb)
})
}
off(event,offCb) {
if(this.subs[event]) {
let index = this.subs[event].findIndex(cb => cb === offCb)
this.subs[event].splice(index,1)
if(!this.subs[event].length) delete this.subs[event]
}
}
}
使用
let event = new EventEmitter()
// 监听事件
event.on('message', function (text) {
console.log(text)
})
// 触发事件
event.emit('message', 'hello world')