SOURCE

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 命令行工具 X clear

                    
>
console