off与once方法只支持具名函数
class EventEmitter {
constructor() {
this.hub = {}
}
$on(eventName, fn) {
this.hub[eventName] ? this.hub[eventName].push(fn) : this.hub[eventName] = [fn]
}
$emit(eventName) {
this.hub[eventName] && this.hub[eventName].forEach(fn => fn())
}
$off(eventName,fn) {
if(this.hub[eventName]){
this.hub[eventName].forEach((item,i)=>{
if(item === fn){
this.hub[eventName].splice(i,1)
}
})
}
}
$once(eventName,fn){
if(this.hub[eventName]){
this.hub[eventName].forEach((item,i)=>{
if(item === fn){
fn()
this.$off(eventName,item)
}
})
}
}
}
网友评论