我需要在实例化之前的类声明中运行代码。这对于在工厂中自动注册类特别有用。参见:
// Main.as
public class Main extends Sprite
{
public function Main() : void
{
var o : Object = Factory.make(42);
}
}
// Factory.as
public class Factory
{
private static var _factory : Array = new Array();
public static function registerClass(id : uint, c : Class) : void
{
_factory[id] = function () : Object { return new c(); };
}
public static function make(id : uint) : Object
{
return _factory[id]();
}
}
// Foo.as
public class Foo
{
// Run this code before instanciating Foo!
Factory.registerClass(CLASS_ID, Foo);
public static const CLASS_ID : uint = 42;
}
AFAIK,ActionScript语言的JIT机器不允许我这样做,因为在Foo
方法中没有引用Main
。正在生成Foo
类,我不能(也不想)在Main
中注册类:我想在特定包(或库)中注册所有导出的类。理想情况下,这可以通过包内省来完成,而ActionScript 3中并不存在。
您知道我的设计问题的任何修复(或其他解决方案)吗?
答案 0 :(得分:0)
我不是100%确定这是否是您所追求的,但您尝试过使用静态初始化程序吗?
public class Foo
{
// Static Initializer
{
Factory.registerClass(CLASS_ID, Foo);
}
public static const CLASS_ID : uint = 42;
}
http://life.neophi.com/danielr/2006/12/static_initializers_in_as3.html
答案 1 :(得分:0)
您可以使用编译器选项在生成的SWF或SWC中包含类字节代码。但您必须使用MXMLC(或SWPC的COMPC)进行编译。