我有一種每次調用時都會記錄消息的方法。我希望這個日誌消息指出方法是直接調用還是在子類中使用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
調用還是直接調用?