class Event {
constructor() {
this.list = {}
}
on(event, fn) {
(this.list[event] || (this.list[event] = [])).push(fn)
return this
}
emit() {
let event = [].shift.call(arguments)
if (this.list[event]) {
this.list[event].forEach((fn) => {
fn(...arguments)
})
} else {
throw "no event"
}
}
off(event, fn) {
if (!this.list[event]) return
if (fn) {
let i = this.list[event].findIndex(v => v === fn)
i != -1 && this.list[event].splice(i, 1)
} else {
this.list[event] && (this.list[event].length = 0)
}
}
}
export default new Event()