看下面的示例代码:
package
{
import flash.display.Sprite;
import flash.text.TextField;
public class startClass extends Sprite
{
private var str:String;
public function startClass()
{
this["str"] = "aaa";
var txt:TextField = new TextField();
txt.text = str;
addChild(txt);
}
}
}
用符号[]来引用成员变量的用法在Flex框架中也出现。
比如:
在mx.managers.SystemManager中定义了如下成员变量:
mx_internal var childManager:ISystemManagerChildManager;
该变量是在mx.managers.systemClasses.ChildManager的构造函数中,按照上面的例子的形式为其赋值的:
public function ChildManager(systemManager:IFlexModuleFactory)
{
super();
if (systemManager is ISystemManager)
{
systemManager["childManager"] = this;
this.systemManager = ISystemManager(systemManager);
this.systemManager.registerImplementation("mx.managers::ISystemManagerChildManager", this);
>>原因分析:
SystemManager的该childManager成员变量的访问属性不是Public,因此,在ChildManager类中无法通过SystemManager.childManager=XXX的形式为其赋值。
systemManager["childManager"] 是动态的表现形式,在编译期不受检查。
>>点评:
分析Flex框架源代码,感觉类之间的关系被设计的过于复杂(你中有我,我中有你)。
再加上使用了事件机制对程序执行顺序加以控制,使得通过源代码来理解Flex框架的执行顺利变得很困难(思路在不同代码程序片段直接跳来跳去)。
代码可读性不好。
作为在实际项目应用中,需要经常被扩展的UI框架,理应被设计的更好些,更容易被理解才行。
也许是:
(1)框架开发没有严格的规范(欧美项目开发的特征?)
(2)“作为框架代码,如果谁都能读懂,岂不轻易被人复制”的考虑?