Script segment for UIComponent.as

出自Fallseir's Wiki

跳转到: 导航, 搜索

动态加载一个类

找了好久的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 转载请保留

个人工具
测试
tools