是否可以将类放在变量中并在 ActionScript3 中访问类的静态变量和函数?



假设我有以下类

public class Scene{ 
  public static var title="new scene";
  public function Scene(){}
  public static function start() { trace("scene started"); }
}

如何访问Scene类的静态变量和函数?

var i:Class = Scene;
trace(i.title);
i.start();

我正试图弄清楚分配给Class的变量是如何在actionscript中工作的。欢迎任何提示。谢谢

静态方法从类中调用:

trace(Scene.title);
Scene.start();

Singleton模式通过接口类实现构造函数、本地引用和潜在的抽象。

Scene作为单例的示例:

package
{
    public class Scene
    {
        private static var instance:Scene = new Scene();
        public static function getInstance():Scene
        {
            return instance;
        }
        public var title:String = "new scene";
        public function Scene()
        {
            if (instance)
                throw new Error("Scene is a singleton and can only be accessed through Scene.getInstance()");
        }
        public function start():void
        {
            trace("scene started.");
        }
    }
}

您现在的示例实现是:

var i:Scene = Scene.getInstance();
trace(i.title);
i.start();

这就是访问动态类(场景)&它的特性/方法:

var myDynamicClasses:Array = [Scene];   // Required
var i:Class = Class(getDefinitionByName("Scene"));
trace(i.title);
i.start.call();

如果不包括第一行,这可能会引发错误。因为,当编译器注意到类Scene(不是adobe包中的那个)没有被使用时,它会忽略它。因此,它将不可用于动态初始化。

我们可以通过将这些类名放在变量中来强制编译器包含这些类,或者像上面那样声明一个数组作为快速破解。

如果你有很多动态类,你可以在这个数组中添加对它们的引用&编译器将包括每个类,以便进行动态初始化。

var i:Class = Scene;
trace(i.title);

应该抛出一个错误,因为编译器在到达第2行时不能再假设i是一个场景。如果您要强制Class对象,它应该可以工作。

var i:Class = Scene;
trace((Scene(Class).title);

相关内容

  • 没有找到相关文章

最新更新