在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 转载请保留

已经有2个回复

  1. 永无止境 Says @ 08-03-19 00:11

    能做个链接不…
    永无止境
    http://www.5la.name

  2. Raymond Says @ 08-03-23 02:59

    hi,请问你如何做的feed? 如何解析的 麻烦告知一下 多谢了

看完了要说点啥么?

You must be logged in to post a comment.