class EventEmitter {
constructor() {
this.events = {}
}
on(eventType, fn) {
if(this.events[eventType]) {
this.events[eventType].push(fn)
} else {
this.events[eventType] = [fn]
}
}
off(eventType, fn) {
if(!this.events[eventType]) return
this.events[eventType] = this.events[eventType].filter(item => item !== fn)
if(!this.events[eventType].length) delete this.events[eventType]
}
emit(eventType, ...args) {
this.events[eventType] && this.events[eventType].forEach(fn => fn.apply(this, args))
}
once(eventType, fn) {
function nfn(...args) {
fn.apply(this, args)
this.off(eventType, nfn)
}
this.on(eventType, nfn)
}
}
手写EventEmitter(发布订阅模式)
最新推荐文章于 2024-06-20 01:27:45 发布