, лови.

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Example extends Sprite
{
//массив со списком слушателей
private var arr:Array = new Array();
function Example():void
{
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
}
// переписываем оригинальную функцию
public override function addEventListener(type:String, listener:Function,
useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
{
super.addEventListener(type, listener, useCapture, priority, useWeakReference); //вызываем оригинальную (не override) функцию
arr.push([type, listener]); //обновляем массив arr новым слушателем
}
public override function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
{
super.removeEventListener(type, listener, useCapture); //вызываем оригинальную (не override) функцию
var arr:Array = this.arr; //создаем локальную ссылку на массив, чтобы ускорить код в этой функции
var len:int = arr.length;
// проходимся по массиву от конца к началу, дабы удаление элементов не повлияло на актуальность операций
for (var i:int = len-1; i >= 0; i--)
{
if (type === arr[i][0]) //если удаляемый тип слушателя найден...
{
arr.splice(i, 1); // удаляем весь элемент-массив (т.е. тип_слушателя_+_ссылка_на_функцию)
}
}
}
private function addedToStage(e:Event):void
{
addEventListener(Event.REMOVED_FROM_STAGE, removeListeners);
removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
}
private function removeListeners(e:Event):void
{
removeEventListener(Event.REMOVED_FROM_STAGE, removeListeners);
var arr:Array = this.arr; //создаем локальную ссылку на массив, чтобы ускорить код в этой функции
var len:int = arr.length;
//Проходимся по всему списку массива сло слушателя и ВСЕХ их удаляем.
for (var i:int = len-1; i >= 0; i--)
{
removeEventListener(arr[i][0], arr[i][1]);
}
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
while (this.numChildren > 0) // если у объекта есть дети, удаляем их
{
removeChildAt(0);
}
}
}
}