我有一种每次调用时都会记录消息的方法。我希望这个日志消息指出方法是直接调用还是在子类中使用super
调用。确定是否使用超级调用的ActionScript方法
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
是否已经通过比较this.doWork
到DoerOfWork.prototype.doWork
覆盖的doWork
实施。
不幸的是,这是不可能的。未绑定的方法在ActionScript中无法访问(规范列出了两种类型的函数:函数闭包和绑定方法)。在MethodClosure
上的实例上甚至没有任何属性可以确定是否有两个绑定了相同方法的副本。
如何检查方法是否被重写或使用其他方法来确定当前正在执行的ActionScript方法是使用super
调用还是直接调用?