Home Reference Source

src/event-emitter.js

/**
 * Use to emit events
 * @example
 * class MyClass extends EventEmitter {
 *     doSomething() {
 *        this.dispatch('my-event', { message: 'event' });
 *     }
 * }
 */
export class EventEmitter {
    constructor() {
        /**
         * List of registers
         * @protected
         * @type {Array}
         */
        this.registered = [];
    }

    /**
     * Listen event
     * @param {String} event
     * @param {function} callback
     * @param {mixed} context
     */
    on(event, callback, context) {
        this.registered.push({ event, callback, context });
    }

    /**
     * Dispatch event
     * @param {String} event
     * @param {mixed} args
     */
    dispatch(event, args) {
        this.registered.forEach(register => {
            if (register.event === event) {
                register.callback.call(register.context || this, args);
            }
        });
    }
}