Я привык к более управляемой событиями среде, но копия, над которой я сейчас работаю, дозирует все как обратные вызовы функций. Когда я спросил об этом, один из разработчиков сказал, что это потому, что обратные вызовы быстрее из-за пузырьков, но свойство пузырьков всегда может быть установлено в false ...
Итак, у меня проблема с попыткой выяснить, на какую функцию обратного вызова ссылаются.
Например:
public class A {
public function A(){}
public function func_1():Number{ return 1; }
public function func_2():Number{ return 2; }
public function doSomething:Function{
if( Math.random > 0.5 ) return func_1; else return func_2;
}
}
Тогда я мог бы запустить код в классе B:
public class B{
public var a:A = new A();
private var action:Function;
public function B(){ action = a.doSomenthing(); }
}
Так что, когда я ставлю точку останова внутри BI, get action = Function (@ 34567), которая на самом деле совершенно бесполезна ... Я понимаю, что могу поставить точку останова как в func_1, так и в func_2, но я просто использую это как В общем примере есть обратные вызовы функций, разбросанные по коду ... есть ли способ получить имя функции по адресу памяти? Спасибо
Полагаю, я понимаю, что вы говорите о трассировке стека. Но вы должны физически перешагнуть через функцию в коде. В этом примере ниже я должен поставить точку останова на callback (); и перешагните через него, чтобы увидеть обновление трассировки стека. Проблема в том, что я хочу знать обратные вызовы, прежде чем они будут вызваны. Иногда их называют в других местах. Нет другого способа получить обратный звонок?
public var callbacks:Array = [];
public function loadURL( url:String, callback:Function ){
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
callbacks.push( callback );
var request:URLRequest = new URLRequest(url);
loader.load(request);
}
public function completeHandler( event:Event ):void
{
for( var i:int = 0; i < callbacks.length; i ++ ){
var callback:Function = callbacks[i];
callback();
}
}