注册一个全局的事件总线,来解决页面/组件间的通信

class EventBus{            constructor() {               this.events = {}            }            $on(name,listener) {                if(!name || !listener)return;                if(Array.isArray(name)){                    for(let i = 0; i < name.length; i++){                        this.$on(name[i],listener);                    }                }else{                    if(!this.events[name]){                        this.events[name] = []                    }                    this.events[name].push(listener);                 }            }            $emit(name) {                if(!this.events)return;                let args = Array.prototype.slice.call(arguments, 1);                for(let key in this.events){                    if(this.events.hasOwnProperty(key) && key === name) {                        const listener = this.events[name];                        if(!listener)return;                        for(let i = 0;i<listener.length;i++){                            if(typeof listener[i] === 'function') {                                listener[i](...args);                            }                        }                       }                }            }            $once(name, listener) {                if(!name || !listener)return;                const that = this;                const _listener = function(){                    listener.apply(that,arguments);                    that.$off(name);                }                this.$on(name, _listener);            }            $off(name) {                if(!this.events || !name)return;                if(Array.isArray(name)) {                    for(let i = 0; i < name.length; i++) {                        this.$off(name);                    }                }else{                    if(this.events[name]){                        delete this.events[name];                    }                }            }        }