58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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;
 |