在ActionScript 3 中动态加载一个类
–Script segment for UIComponent
找了好久的AS3中的反射,终于在这个 UIComponent 中找到了关键字:
反射、动态加载、getDefinitionByName、applicationDomain.getDefinition
关键点:
1. skin is Class 类可以当作变量的值传递
2. new skin() 变量可以用于new方法 用于构建变量的值的实例
3. getDefinitionByName(skin.toString()) 可以通过类名获取类声明,也就是类变量
4. loaderInfo.applicationDomain.getDefinition(skin.toString()) 应用程序域内声明的类不能通过普通的 getDefinitionByName 的方式获取,比如在swf中为miveclip声明的类
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected function getDisplayObjectInstance(
skin:Object):DisplayObject {
var classDef:Object = null;
if (skin is Class) {
return (new skin()) as DisplayObject;
} else if (skin is DisplayObject) {
(skin as DisplayObject).x = 0;
(skin as DisplayObject).y = 0;
return skin as DisplayObject;
}
try {
classDef = getDefinitionByName(skin.toString());
} catch(e:Error) {
try {
classDef = loaderInfo.applicationDomain
.getDefinition(skin.toString()) as Object;
} catch (e:Error) {
// Nothing
}
}
if (classDef == null) {
return null;
}
return (new classDef()) as DisplayObject;
}
by fallseir http://fallseir.com fallseir[at]gmail[dot]com 20080226 转载请保留