如何在ActionScript中访问顶级包?

时间:2011-11-30 11:06:37

标签: actionscript-3 actionscript global

我想从我的一个类中访问ActionScript 3.0 top level function,其中已经定义了与顶级函数具有相同名称(trace)的符号:

class A {
  public static function trace():void {
  }
  trace("Test");
}

我想使用trace调用全局ActionScript trace("Test")函数,但这是不可能的,因为定义了另一个符号function trace()

如果我想要访问的外部定义位于包中(flash.utils左右),我可以使用flash.utils.[definitionName]访问该外部定义,就像我在这里一样的ByteArray:

import flash.utils.*;
class ByteArray {
  var data:flash.utils.ByteArray;
}

ActionScript 3.0中是否有类似的语法表达式允许我在第一个示例中访问跟踪函数而不更改类方法trace的名称?

这是一个假设性问题,请不要考虑解决方法。我需要完全按照上面的要求解决问题。提前谢谢!

1 个答案:

答案 0 :(得分:8)

trace位于public名称空间中,因此可以调用public::trace,但问题是您要重新定义另一个公开跟踪,所以你不能打电话给前一个。

您可以做的是:

1 - 如果您的方法跟踪不必public使其成为protected or private,那么您将能够调用原始跟踪:

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 - 如果您无法更改签名,请将原始跟踪分配到静态var / const中,以便稍后使用:

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")
    }       
}