github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/themes/wind/static/libs/sockjs-client-1.1.0/lib/event/eventtarget.js (about) 1 'use strict'; 2 3 /* Simplified implementation of DOM2 EventTarget. 4 * http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget 5 */ 6 7 function EventTarget() { 8 this._listeners = {}; 9 } 10 11 EventTarget.prototype.addEventListener = function(eventType, listener) { 12 if (!(eventType in this._listeners)) { 13 this._listeners[eventType] = []; 14 } 15 var arr = this._listeners[eventType]; 16 // #4 17 if (arr.indexOf(listener) === -1) { 18 // Make a copy so as not to interfere with a current dispatchEvent. 19 arr = arr.concat([listener]); 20 } 21 this._listeners[eventType] = arr; 22 }; 23 24 EventTarget.prototype.removeEventListener = function(eventType, listener) { 25 var arr = this._listeners[eventType]; 26 if (!arr) { 27 return; 28 } 29 var idx = arr.indexOf(listener); 30 if (idx !== -1) { 31 if (arr.length > 1) { 32 // Make a copy so as not to interfere with a current dispatchEvent. 33 this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1)); 34 } else { 35 delete this._listeners[eventType]; 36 } 37 return; 38 } 39 }; 40 41 EventTarget.prototype.dispatchEvent = function() { 42 var event = arguments[0]; 43 var t = event.type; 44 // equivalent of Array.prototype.slice.call(arguments, 0); 45 var args = arguments.length === 1 ? [event] : Array.apply(null, arguments); 46 // TODO: This doesn't match the real behavior; per spec, onfoo get 47 // their place in line from the /first/ time they're set from 48 // non-null. Although WebKit bumps it to the end every time it's 49 // set. 50 if (this['on' + t]) { 51 this['on' + t].apply(this, args); 52 } 53 if (t in this._listeners) { 54 // Grab a reference to the listeners list. removeEventListener may alter the list. 55 var listeners = this._listeners[t]; 56 for (var i = 0; i < listeners.length; i++) { 57 listeners[i].apply(this, args); 58 } 59 } 60 }; 61 62 module.exports = EventTarget;