//事件监听 var EventTarget = function( sender ){ this._sender = sender; this._listeners = {}; } EventTarget.prototype = { constructor: EventTarget, addListener: function(type, listener){ if(typeof this._listeners[type] === 'undefined'){ this._listeners[type] = []; } this._listeners[type].push(listener); }, removeListener: function(type, listener){ if(listener === undefined){ _listeners[type] = []; return; } var listeners = this._listeners[type], index; if(Object.prototype.toString.call( listeners) === "[object Array]"){ index = listeners.indexOf(listener); if(index >= 0){ listeners.splice(index, 1); } } }, fire: function(event){ var _this = this, data = arguments.slice(1); if( typeof event === "string"){ event = {type: evnet}; } if(!event.target){ event.target = _this; } if( !event.type){ throw new Error('Event Object missing type property'); } if(Object.prototype.toString.call(_this._listeners[event.type]) === "object Array"){ var listeners = _this._listeners[event.type]; listeners.foreach(function(item, index){ item.call(_this, event, data); }) } } }