Mam metodę, która rejestruje komunikat przy każdym wywołaniu. Chciałbym, aby ten komunikat dziennika wskazał, czy metoda została wywołana bezpośrednio, czy wywołana przy użyciu klasy super
w klasie potomnej.Określa, czy metoda ActionScript wywoływana przy użyciu super
class DoerOfWork {
public function doWork():void {
var calledWithSuper:Boolean;
calledWithSuper = ???;
trace("doWork called" + (calledWithSuper ? " (with super)." : "."));
}
}
class SlowerDoerOfWork extends DoerOfWork {
public override function doWork():void {
for (var i:Number = 0; i < 321684; i++) {
// wait a moment
}
super.doWork();
}
}
Mam nadzieję, że będzie to możliwe do ustalenia, czy klasa this
była przesłonięta realizację doWork
porównując this.doWork
do DoerOfWork.prototype.doWork
.
Niestety nie jest to możliwe. Metody niezwiązane są niedostępne nigdzie w języku ActionScript (specyfikacja zawiera dwa typy funkcji: zamknięcia funkcji i metody związane). Nie ma nawet żadnych właściwości instancji na MethodClosure
, które mogłyby zidentyfikować, czy dwa są związanymi kopiami tej samej metody.
Jak mogę sprawdzić, czy dana metoda została nadpisana lub użyć innej metody w celu ustalenia, czy aktualnie wykonywana metoda ActionScript została wywołana przy użyciu super
lub bezpośrednio?