方式一 继承
例如:
'use strict' import Vue from 'vue' export class EventBus extends Vue { // Register a custom callback as meddler that gets called upon each event emission. // It can be bound to $on as well. $meddle (callback) { this.meddler = callback } // Override Vue's $emit to call the custom meddler callback upon each event emission. $emit (event, ...args) { if (this.meddler && typeof this.meddler.call === 'function') { this.meddler(event, ...args) } return super.$emit(event, ...args) } // We can also override $on() to listen to callbacks being registered. } export default new EventBus()
方式二 hijacking
例如:
'use strict' import Vue from 'vue' class EventBusFactory { static create () { return this.hijack(new Vue()) } static hijack (bus) { bus.$meddle = callback => { bus.meddler = callback } const orig$emit = bus.$emit bus.$emit = (event, ...args) => { if (bus.meddler && typeof bus.meddler.call === 'function') { bus.meddler(event, ...args) } orig$emit.call(bus, event, ...args) } return bus } } export default EventBusFactory.create()