Actionscript 3 AS3中getDefinition和getDefinitionByName之间的差异

Actionscript 3 AS3中getDefinition和getDefinitionByName之间的差异,actionscript-3,Actionscript 3,有人能解释一下getDefinitionByName和getDefinition在AS3中的区别吗 当我加载外部SWF时,我不能使用getDefinitionByName,因为我得到一个错误#1065 但是使用externalSWF\u ContentLoaderInfo.applicationDomain.getDefinition可以正常工作 那么,为什么getDefinitionByName找不到类名呢? 我的意思是,如果定义在加载的SWF的applicationDomain中,为什么不在

有人能解释一下getDefinitionByName和getDefinition在AS3中的区别吗

当我加载外部SWF时,我不能使用
getDefinitionByName
,因为我得到一个错误#1065

但是使用
externalSWF\u ContentLoaderInfo.applicationDomain.getDefinition
可以正常工作

那么,为什么getDefinitionByName找不到类名呢? 我的意思是,如果定义在加载的SWF的applicationDomain中,为什么不在主SWF中呢?(我正在使用Flex)


Offtopic:我无法创建新标记,因此无法添加标记getDefinition和getDefinitionByName:(

getDefinition是返回类、命名空间或函数定义的方法

getDefinitionByName是一个包级函数,从中返回可用于实例化新对象的类对象。该定义必须已加载到应用程序域的某个位置

无法使用外部SWF创建getDefinitionByName的原因是它被加载到单独的应用程序域中。第二个示例之所以有效,是因为您的目标是正确的应用程序域。要使第一个示例有效,您必须将外部SWF加载到当前的应用程序域中,如下所示:

var request:URLRequest = new URLRequest("externalSWF.swf");
var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
var loader:Loader = new Loader();
loader.load(request,context);

这是因为它将当前ApplicationDomain作为加载程序上下文的属性传递。

OK,因此getDefinitionByName()是ApplicationDomain.currentDomain.getDefinition()的某种类型的快捷方式在主应用程序中?在您当时所在的任何应用程序域中,是的。什么决定了您所在的应用程序域?是包含调用getDefinition的方法的类的应用程序域(AD)(即位于调用堆栈顶部的应用程序域)吗?