2 module.exports = EventEmitter;
\r
5 * Constructs a new event emitter instance.
\r
6 * @classdesc A minimal event emitter.
\r
10 function EventEmitter() {
\r
13 * Registered listeners.
\r
14 * @type {Object.<string,*>}
\r
17 this._listeners = {};
\r
21 * Registers an event listener.
\r
22 * @param {string} evt Event name
\r
23 * @param {function} fn Listener
\r
24 * @param {*} [ctx] Listener context
\r
25 * @returns {util.EventEmitter} `this`
\r
27 EventEmitter.prototype.on = function on(evt, fn, ctx) {
\r
28 (this._listeners[evt] || (this._listeners[evt] = [])).push({
\r
36 * Removes an event listener or any matching listeners if arguments are omitted.
\r
37 * @param {string} [evt] Event name. Removes all listeners if omitted.
\r
38 * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.
\r
39 * @returns {util.EventEmitter} `this`
\r
41 EventEmitter.prototype.off = function off(evt, fn) {
\r
42 if (evt === undefined)
\r
43 this._listeners = {};
\r
45 if (fn === undefined)
\r
46 this._listeners[evt] = [];
\r
48 var listeners = this._listeners[evt];
\r
49 for (var i = 0; i < listeners.length;)
\r
50 if (listeners[i].fn === fn)
\r
51 listeners.splice(i, 1);
\r
60 * Emits an event by calling its listeners with the specified arguments.
\r
61 * @param {string} evt Event name
\r
62 * @param {...*} args Arguments
\r
63 * @returns {util.EventEmitter} `this`
\r
65 EventEmitter.prototype.emit = function emit(evt) {
\r
66 var listeners = this._listeners[evt];
\r
70 for (; i < arguments.length;)
\r
71 args.push(arguments[i++]);
\r
72 for (i = 0; i < listeners.length;)
\r
73 listeners[i].fn.apply(listeners[i++].ctx, args);
\r