src/emitter.js
- /**
- * Event emitter class
- */
- export class Emitter {
- /**
- * Creates an instance of Emitter.
- */
- constructor() {
- /**
- * Events object
- * @type {Object}
- */
- this.events = {};
- }
-
- /**
- * Subscribe to an event
- * @param {Array} evts Collection of event names
- * @param {Function} fn Function invoked when event is emitted
- */
- on(evts, fn) {
- evts.forEach((evt) => {
- this.events[evt] = this.events[evt] || [];
- this.events[evt].push(fn);
- });
- }
-
- /**
- * Unsubscribe to an event
- * @param {Array} evts Collection of event names
- * @param {Function} fn Function invoked when event is emitted
- */
- off(evts, fn) {
- evts.forEach((evt) => {
- if (evt in this.events) {
- this.events[evt].splice(this.events[evt].indexOf(fn), 1);
- }
- });
- }
-
- /**
- * Emit an event
- * @param {String} evt Event name followed by any other argument passed to
- * the invoked function
- */
- emit(evt /*, args...*/) {
- if (evt in this.events) {
- for (let i = 0; i < this.events[evt].length; i++) {
- this.events[evt][i].apply(this, [].slice.call(arguments, 1));
- }
- }
- }
- }