- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这两个方法组在它们使用的类集方面有什么区别(即 ApplicationDomain 的类定义集与 getDefinitionByName 使用的类定义集)?
很明显,存在应用程序域层次结构,并且定义可能在某些应用程序域中可见,而在其他应用程序域中不可见。例如,ApplicationDomain.getDefinition 是否会返回一个未在给定应用程序域中定义但可从中访问的定义? (例如,如果域是子域,而我们正在查找在父域中定义的定义?)ApplicationDomain 的文档只是说“加载的类仅在其父域尚未定义时才定义。”但它也表示“(ApplicationDomains) 允许存在同一类的多个定义,并允许子级重用父级定义。”
文档还指出 getDefinitionByName 返回 class 定义,而 ApplicationDomain.getDefinition 除了类定义之外还将返回 namespace 和 function 定义。
假设我只对类定义感兴趣,那么 getDefinitionByName 会搜索哪些 ApplicationDomains? (例如,所有域、仅当前/调用者域,或调用者可访问的任何域?)
这个初始测试令人困惑:
import flash.system.ApplicationDomain;
var d:ApplicationDomain = new ApplicationDomain( ApplicationDomain.currentDomain ); //child of current domain
trace(ApplicationDomain.currentDomain.hasDefinition("flash.display.DisplayObject")); //true
trace(ApplicationDomain.currentDomain.getQualifiedDefinitionNames().length); //1 (the main timeline class definition only: Untitled_fla::MainTimeline)
trace(d.hasDefinition("flash.display.DisplayObject")); //false
在上面的测试中,一方面,getQualifiedDefinitionNames报告当前应用域中只有主时间线类被定义,而getDefinition对DisplayObject返回true,表明它报告父(系统)域中存在定义,但孙域上的最终跟踪通过返回 false 与此相矛盾。
ApplicationDomain.currentDomain.parentDomain 也返回 null,这直接与以下文档声明相矛盾:“系统域包含所有应用程序域,包括当前域...”和“除系统域外的每个应用程序域都有一个关联的父域。您的主应用程序的应用程序域的父域是系统域。”
这里矛盾很明显,currentDomain里面有定义,但是当你创建一个子域访问父域,应该是currentDomain的时候,突然报错没有定义:
trace(ApplicationDomain.currentDomain.hasDefinition("flash.display.DisplayObject")); //true
trace((new ApplicationDomain( ApplicationDomain.currentDomain )).parentDomain.hasDefinition("flash.display.DisplayObject")); //false! why?
最佳答案
此页面非常全面:http://www.senocular.com/flash/tutorials/contentdomains/?page=2我设法解决了几个谜团,但上面概述的基本问题(特别是关于 getDefinitionByName 的范围)仍然存在。我只是想发布一个我能够解决的问题的答案。
如果父域是系统域,则检索 parentDomain 返回 null。因此,尽管 parentDomain 是系统域,但 parentDomain property 无论如何都会返回 null。就是那样子。不幸的是,这使得系统域无法访问,例如,对于通过 getQualifiedDefinitionNames 进行的类枚举。
关于我的初始测试,似乎构建一个新的 ApplicationDomain 会创建一个死对象,直到在该域下实际加载 SWF。例如,创建当前域的子域并在其上调用 hasDefinition 将返回 false,但是如果您将同一个实例分配给加载程序上下文并将其传递给 Loader.load,一旦加载完成,您可以调用 hasDefinition最初返回 false 的实例,它将返回 true。因此,您可以构建一个具有父级的 ApplicationDomain,但它在被积极使用之前不会真正发挥作用。
var d:ApplicationDomain = new ApplicationDomain( ApplicationDomain.currentDomain ); //child of current domain
trace(d.hasDefinition( "flash.display.DisplayObject" )); //false for now...
var l:Loader = new Loader();
l.load(new URLRequest( "any.swf"), new LoaderContext( false, d ) );
l.contentLoaderInfo.addEventListener( Event.COMPLETE, completed, false, 0, true );
function completed(e:Event ):void
{
trace(d.hasDefinition( "flash.display.DisplayObject" ); //...and now it's true.
}
因此,ApplicationDomain.getDefinition 似乎确实报告了父域、祖父域等域中的类,但它只会在新的 ApplicationDomain 实例通过向其中加载某些内容而被激活后才会这样做。
此外,ApplicationDomain 实例可能引用相同的应用程序域,但不能直接比较它们。例如,(ApplicationDomain.currentDomain == ApplicationDomain.currentDomain
) 为假。
关于actionscript-3 - flash.utils.getDefinitionByName 与 ApplicationDomain 的类定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22767776/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!