SWF用于运行时加载,而SWC在编译时用做外部库
1. ApplicationDomain.currentDomain.getDefinition方法获取不在应用程序域内的定义,或者被父域覆盖的定义。这个方法返回应用程序域及其任意父域内的定义引用
2.也可以用SWF的LoaderInfo.applicationDomain来获得在ApplicationDomain.currentDomain以外的应用程序域
3.在当前应用程序域内使用ApplicationDomain.currentDomain.getDefinition方法的效果等同于全局函数getDefinitionByName
var name:String = getQualifiedClassName(e.target.content)
getDefinitionByName(name)
loader.contentLoaderInfo.applicationDomain.getDefinition("class")
getDefinition:
getDefinitionByName反射自定义类时发现一直报错(未找到相应类),发现问题是出在as的编译机制即“如果一个类在程序中完全没有引用过,那么这个类就不会编译到文件中(即便已经导入了也一样)。”解决办法只需初始一个自定义类类型的变量。var a:Class;
定义的继承和类继承有点类似,两者都是子级可以访问父级的定义,而反之则不行。
应用程序域的继承不允许子级覆盖父级的定义。如果子域中包含有与父域一样的定义(指的是完全限定名称一致,包括包路径)
那么父域中的定义会取代掉子域
var name:String = getQualifiedClassName(evt.currentTarget.content).replace("::",".")
载入swf是方法
var mc:Class = getDefinitionByName(cla) as Class;
return mc;
}
1.默认的加入父应用域的子域 new ApplicationDomain(ApplicationDomain.currentDomain)
则在父域使用getDefinitionByName('swf中的类')访问,则出现子类名未定义错误
解决方法:子类是定义个返回getDefinitionByName()方法,父域载入swf时,使用(e.target.content).fun(),获得Class
2.加入当前应用域 ApplicationDomain.currentDomain
共享域的内容,父类与子类都能访问
3. 当前系统应用域新建一个应用域 new ApplicationDomain(null)
通过子类定义方法可以获取Class,当不能对e.target.content进行强转
则出现:TypeError: Error #1034: 强制转换类型失败:无法将 sub::B@5efb041 转换为 sub.B。
ApplicationDomain:
bclass = ApplicationDomain.currentDomain.getDefinition('sub.B') as Class;
}else if(_loader.contentLoaderInfo.applicationDomain.hasDefinition("sub.B")){ //新建域,父域的子域
bclass = _loader.contentLoaderInfo.applicationDomain.getDefinition('sub.B') as Class;
}else{
trace("出错了。。。")
}
使用SWC库,只有当类实例化new class()后才编译入主程序中