0

说我有以下课程

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 中工作。欢迎任何提示。谢谢。

4

3 回答 3

1

从类中调用静态方法:

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

单例模式通过接口类启用构造函数、本地引用和潜在的抽象。

单例示例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();
于 2013-02-15T05:05:12.440 回答
1

这是您可以访问动态类(场景)及其属性/方法的方式:

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

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

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

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

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

于 2013-02-15T05:05:39.467 回答
1
var i:Class = Scene;
trace(i.title);

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

var i:Class = Scene;
trace((Scene(Class).title);
于 2013-02-15T10:02:47.797 回答