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

Posted

技术标签:

【中文标题】是否可以将 Class 放入一个变量中并在 actionscript3 中访问该类的静态变量和函数?【英文标题】:is it possible to put Class in a variable and access the class's static variables and functions in actionscript3? 【发布时间】:2013-01-31 00:59:23 【问题描述】:

假设我有以下课程

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

【问题讨论】:

【参考方案1】:

Static methods 从类中调用:

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

【讨论】:

OP 并不真正希望单例类。他只是想初始化一个动态类...【参考方案2】:

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

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

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

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

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

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

【讨论】:

这似乎过于动态和 hacky,消除类型检查 i.foo 不会引发编译器警告。有更好的模式。 当然。但是当有关于某事是否可能的特定问题时,我不会担心设计模式。此外编译器不会在上述情况下抛出警告。【参考方案3】:
var i:Class = Scene;
trace(i.title);

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

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

【讨论】:

以上是关于是否可以将 Class 放入一个变量中并在 actionscript3 中访问该类的静态变量和函数?的主要内容,如果未能解决你的问题,请参考以下文章

将所有图片打包到服务器上的单个存档中并在客户端解包

将一个主题的数据放入回调函数中的动态数组中并进行一些计算

如何让 vbscript 将变量保存到文本文件中并在重新打开程序时调用它们?

如何将简单的 SQL 查询存储到用户定义的变量中并在 MySQL 中执行?

将 AS2 SWF 加载到 AS3 SWF 中并在 URL 中传递变量

将 HTML 加载到 Flash 中并在 ActionScript 3 中使用 PrintJob() 进行打印?