private var _listeners:Object = {}; public function Broadcaster(){ } public function addEventListener(eventName:String, listenerObj:Object, methodName:String):Void{ if(_listeners[eventName] == undefined){ _listeners[eventName] = new Array(); } _listeners[eventName].push({listenerObj:listenerObj, methodName:methodName}); } public function broadcastEvent(eventName:String, data:Object):Void{ var eventQueue:Array = new Array(); for(var i:Number = (listeners.length - 1); i >= 0; i--){ var method:String = eventName; if(_listeners[eventName][i].methodName != undefined){ method = _listeners[eventName][i].methodName; } eventQueue.push({listenerObj:_listeners[eventName][i].listenerObj, method:method}) } for(var i:Number = (listeners.length - 1); i >= 0; i--){ eventQueue[ii].listenerObj[eventQueue[ii].method](data); } } public function removeEventListener(eventName:String, listenerObj:Object, methodName:String):Void{ if(_listeners[eventName] == null){ return; } var listeners:Array = _listeners[eventName]; for(var i:Number = (listeners.length - 1); i >= 0; i--){ if(listeners[i].listenerObj == listenerObj && listeners[i].methodName == methodName){ _listeners[eventName].splice(i, 1); //splice the member, not the local copy return; } } }