liusuyi
2023-04-24 4737f1e038743ced243c9e52423404d9034d6107
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
'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;