You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.2 KiB
58 lines
1.2 KiB
'use strict';
|
|
|
|
var inherits = require('inherits')
|
|
, EventTarget = require('./eventtarget')
|
|
;
|
|
|
|
function EventEmitter() {
|
|
EventTarget.call(this);
|
|
}
|
|
|
|
inherits(EventEmitter, EventTarget);
|
|
|
|
EventEmitter.prototype.removeAllListeners = function(type) {
|
|
if (type) {
|
|
delete this._listeners[type];
|
|
} else {
|
|
this._listeners = {};
|
|
}
|
|
};
|
|
|
|
EventEmitter.prototype.once = function(type, listener) {
|
|
var self = this
|
|
, fired = false;
|
|
|
|
function g() {
|
|
self.removeListener(type, g);
|
|
|
|
if (!fired) {
|
|
fired = true;
|
|
listener.apply(this, arguments);
|
|
}
|
|
}
|
|
|
|
this.on(type, g);
|
|
};
|
|
|
|
EventEmitter.prototype.emit = function() {
|
|
var type = arguments[0];
|
|
var listeners = this._listeners[type];
|
|
if (!listeners) {
|
|
return;
|
|
}
|
|
// equivalent of Array.prototype.slice.call(arguments, 1);
|
|
var l = arguments.length;
|
|
var args = new Array(l - 1);
|
|
for (var ai = 1; ai < l; ai++) {
|
|
args[ai - 1] = arguments[ai];
|
|
}
|
|
for (var i = 0; i < listeners.length; i++) {
|
|
listeners[i].apply(this, args);
|
|
}
|
|
};
|
|
|
|
EventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener;
|
|
EventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener;
|
|
|
|
module.exports.EventEmitter = EventEmitter;
|