是否可以将 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 中执行?