呼び出されるたびにメッセージをログに記録するメソッドがあります。このログ メッセージに、メソッドが直接呼び出され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();
}
}
と比較することで、 のクラスがthisの実装をオーバーライドしたかどうかを判断できるようになることを望みました。doWorkthis.doWorkDoerOfWork.prototype.doWork
残念ながら、これは不可能です。バインドされていないメソッドは、ActionScript のどこからでもアクセスできません (仕様には、関数クロージャーとバインドされたメソッドの 2 種類の関数がリストされています)。MethodClosure2 つが同じメソッドのバインドされたコピーであるかどうかを識別できるインスタンスのプロパティさえありません。
メソッドがオーバーライドされているかどうか、または他のメソッドを使用して、現在実行中の ActionScript メソッドが呼び出されたか、superまたは直接呼び出されたかを確認するにはどうすればよいですか?