Blame view

node_modules/sockjs-client/lib/event/emitter.js 1.24 KB
aaac7fed   liuqimichale   add
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;