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

时间:2013-02-15 04:17:38

标签: class variables reflection actionscript hint

说我有以下课程

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();

我正在试图找出如何在ActionScript中分配的变量。 任何提示都会受到欢迎。感谢。

3 个答案:

答案 0 :(得分:1)

从班级调用

Static methods

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();

答案 1 :(得分:1)

这是你可以访问动态类(Scene)和&的方法。它的属性/方法:

var myDynamicClasses:Array = [Scene];   // Required

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

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

我们可以强制编译器通过将这些类名放在变量中来包含这些类,或者将上面的数组声明为快速入侵。

如果您有许多动态类,可以在此数组中添加对它们的引用。编译器将包含每个类以进行动态初始化。

答案 2 :(得分:1)

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

应该抛出一个错误,因为当编译器到达第2行时,编译器不能再认为我是一个场景。如果你强制使用Class对象,它应该可以工作。

var i:Class = Scene;
trace((Scene(Class).title);
相关问题