Path: blob/master/node_modules/@protobufjs/eventemitter/index.js
2591 views
"use strict";1module.exports = EventEmitter;23/**4* Constructs a new event emitter instance.5* @classdesc A minimal event emitter.6* @memberof util7* @constructor8*/9function EventEmitter() {1011/**12* Registered listeners.13* @type {Object.<string,*>}14* @private15*/16this._listeners = {};17}1819/**20* Registers an event listener.21* @param {string} evt Event name22* @param {function} fn Listener23* @param {*} [ctx] Listener context24* @returns {util.EventEmitter} `this`25*/26EventEmitter.prototype.on = function on(evt, fn, ctx) {27(this._listeners[evt] || (this._listeners[evt] = [])).push({28fn : fn,29ctx : ctx || this30});31return this;32};3334/**35* Removes an event listener or any matching listeners if arguments are omitted.36* @param {string} [evt] Event name. Removes all listeners if omitted.37* @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.38* @returns {util.EventEmitter} `this`39*/40EventEmitter.prototype.off = function off(evt, fn) {41if (evt === undefined)42this._listeners = {};43else {44if (fn === undefined)45this._listeners[evt] = [];46else {47var listeners = this._listeners[evt];48for (var i = 0; i < listeners.length;)49if (listeners[i].fn === fn)50listeners.splice(i, 1);51else52++i;53}54}55return this;56};5758/**59* Emits an event by calling its listeners with the specified arguments.60* @param {string} evt Event name61* @param {...*} args Arguments62* @returns {util.EventEmitter} `this`63*/64EventEmitter.prototype.emit = function emit(evt) {65var listeners = this._listeners[evt];66if (listeners) {67var args = [],68i = 1;69for (; i < arguments.length;)70args.push(arguments[i++]);71for (i = 0; i < listeners.length;)72listeners[i].fn.apply(listeners[i++].ctx, args);73}74return this;75};767778