I would like to access an ActionScript 3.0 top level function from a class of mine, in which a symbol with the same name (trace) as the top level function is already defined:
class A {
  public static function trace():void {
  }
  trace("Test");
}
I would like to call the global ActionScript trace function with trace("Test"), but this is not possible as another symbol function trace() is defined.
In a case where the external definition which I would like to access would be located in a package (flash.utils or so), I could access that external definition with flash.utils.[definitionName], as I do here with ByteArray:
import flash.utils.*;
class ByteArray {
  var data:flash.utils.ByteArray;
}
Is there a similar syntactical expression in ActionScript 3.0 that would allow me to access the trace function in the first example without changing the name of my class method trace?
This is a hypothetical question, please do not consider workarounds. I need to solve the problem exactly as asked above. Thanks in advance!
trace is in the public namespace so it could be reached calling public::trace , however here the problem is that you are redefining another public trace, so you can't call the previous one.
What you can do is :
1 - if your method trace have not to be public made it protected or private and then you will be able to call the original trace:
public class Main extends Sprite 
{
    protected function trace(...args):void {
        public::trace(args) // access to the public function trace
    }
    public function Main():void 
    {
        trace("hello world")
    }       
}
2 - if you can't change the signature assign the original trace into a static var/const so you can use it later :
public class Main extends Sprite 
{
    // here save the original trace function
    private static const _trace:Function = trace
    public function trace(...args):void {
        _trace(args) // call the original trace
    }
    public function Main():void 
    {
        trace("hello world")
    }       
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With