class MyEvent {
constructor() {
this.events = {}
}
// 监听事件
$on(event, callback) {
if (!this.events[event]) {
this.events[event] = []
}
this.events[event].push(callback)
}
// 停止监听事件
$off(event, callback) {
if (!this.events[event]) return
if (!callback) {
delete this.events[event]
} else {
this.events[event] = this.events[event].filter(cb => cb !== callback)
}
}
// 触发事件
$emit(event, ...args) {
const targes = this.events[event]
targes && targes.forEach(cb => {
cb.apply(this, args)
})
}
// 只监听一次
$once(event, callback) {
const cbWrap = (...args) => {
callback.apply(this, args)
this.$off(event, cbWrap)
}
this.$on(event, cbWrap)
}
}
console