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