【发布时间】:2011-06-03 03:36:00
【问题描述】:
我有一门课,目前相当混乱/重复:
public class AvFramework extends Object
{
// vars
private var _handler:AvHandler;
private var _keyboard:AvKeyboard;
private var _manager:AvManager;
/**
* Constructor
*/
public function AvFramework()
{
_handler = new AvHandler();
_keyboard = new AvKeyboard();
_manager = new AvManager();
// attach
_handler.framework = this;
_keyboard.framework = this;
_manager.framework = this;
}
/**
* Getters
*/
public function get keyboard():AvKeyboard{ return _keyboard; }
public function get manager():AvManager{ return _manager; }
}
这个类只需要使用越来越多的类,我真的不想像上面那样有3个巨大的列表。
有没有办法动态地执行上述操作 - 可能在字符串循环中使用 getDefinitonByName() 来表示我想要创建的类。
我还希望这些属性是只读的,并且可以通过framework.myDynamicVarHere 访问。
我的想法是这样的:
- 我创建了一个我想要创建实例的类的列表,并与它们应该被访问的变量名配对。
- 我需要创建类
dynamic,以便我可以通过this["var"] = new Blah();设置变量
快速了解我的想法:
var required:Object =
{
keyboard: "avian.framework.background.AvKeyboard",
manager: "avian.framework.background.AvManager",
handler: "avian.framework.background.AvHandler"
};
var i:String;
for(i in required)
{
var Req:Class = Class(getDefinitionByName(required[i]));
this[i] = new Req();
AvFrameworkObject(this[i]).framework = this;
}
只是不确定如何将这些设置为只读。
【问题讨论】:
-
这个:
var i:String;for(i in required)不是必需的。使用for(var i:String in required),您只需初始化一次字符串,并且字符串在 for 循环之后仍然存在。附加线唯一能带给您的就是……附加线。 -
@cwallenpoole 没错,这对我来说读起来更好。 @Eugeny89 谢谢:)
标签: flash actionscript-3 private dynamically-generated