Ho un metodo che registra un messaggio ogni volta che viene chiamato. Vorrei che questo messaggio di registro indicasse se il metodo è stato chiamato direttamente o invocato usando super
in una classe figlia.Determinare se il metodo ActionScript ha chiamato utilizzando 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();
}
}
speravo che sarebbe stato possibile determinare se la classe di this
aveva ignorato l'attuazione di doWork
confrontando this.doWork
-DoerOfWork.prototype.doWork
.
Purtroppo questo non è possibile. I metodi non associati non sono accessibili da nessuna parte in ActionScript (la specifica elenca due tipi di funzioni: chiusure di funzioni e metodi associati). Non c'è nemmeno alcuna proprietà su istanze su MethodClosure
che potrebbe identificare se due sono copie vincolate dello stesso metodo.
Come è possibile verificare se un metodo è stato sovrascritto o utilizzare un altro metodo per determinare se il metodo ActionScript attualmente in esecuzione è stato chiamato utilizzando super
o chiamato direttamente?