所有
在我正在构建的Flash应用程序中,我有一个“主”SWF,它将加载各种“子”SWF。
主SWF和子SWF的所有AS3代码都包含在外部.as类文件中。
换句话说,每部电影都有自己的文档类.as文件。
对于所有常见元素(例如,UI按钮和控件),还有许多.as类文件。
所以 - 例如 - 我的主SWF和所有子SWF都使用“MyCommandButton”类;此类的代码位于MyCommandButton.as中,所有SWF都引用(导入)。
这是我不明白的地方。
(假设MyCommandButton.as中的代码绘制了红色的按钮。)
首先,我编译子SWF的所有。
下一步,我更改了MyCommandButton.as,因此它绘制的按钮是蓝色,而不是红色。
然后,我编译主SWF。
当我运行app(main.swf)时,我期望主SWF中的所有按钮都是 blue (因为这就是MyCommandButton.as指定的内容)当编译main.swf时,子SWF中的所有按钮都将红色(因为这是他们编译时MyCommandButton.as所指定的。)
相反,所有按钮都是蓝色,这意味着我对MyCommandButton.as所做的更改会影响所有子SWF,即使我没有重新编译它们。
这是为什么?对于为什么会发生这种情况有一个简单的解释吗?
非常感谢提前!
答案 0 :(得分:4)
这是由于Flash处理加载字节代码的方式。具体来说,请查看ApplicationDomain文档。
除系统域外,每个应用程序域都有一个关联的父域。主应用程序的应用程序域的父域是系统域。加载的类仅在其父级尚未定义它们时定义。您不能使用较新的定义覆盖已加载的类定义。
请注意“仅当父级尚未定义它们时才定义已加载的类”部分。子SWF中的MyCommandButton类已存在于主SWF(父ApplicationFmain)中,因此未使用。
这对于防止黑客行为尤为重要。想想如果你可以将你的SWF注入别人的动态应用程序并开始重写所有课程的可能性。