使用 AS3 和 getDefinitionByName() 覆盖动态加载类中的公共方法

发布于 2024-09-15 22:56:11 字数 715 浏览 1 评论 0原文

我有两个 SWF:main.swf 和 external.swf。 main.swf 需要访问 external.swf 中的一些方法,因此它将 external.swf 加载到自身中并使用 getDefinitionByName("package.Class") 访问该类及其方法之一:

var ExternalClass = getDefinitionByName("package.Class") as Class;
var ClassInstance = new ExternalClass();
var NeededFunction:Function = ClassInstance["NeededFunction"] as Function;
var response:String = NeededFunction(param);

现在,我需要扩展以下功能NeededFunction (这是一个公共方法)...我知道可以覆盖公共方法,但是我将如何使用动态加载的类来解决这个问题?

我想我可以做这样的事情,但它不起作用:

var ClassInstance["NeededFunction"] = function(param1:uint):String { 
    var newString = "Your number is: "+param1.toString();  //New functionality
    return newString;
}

I have two SWFs: main.swf and external.swf. main.swf needs to access some methods in external.swf, so it loads external.swf into itself and uses getDefinitionByName("package.Class") to access the class and one of its methods:

var ExternalClass = getDefinitionByName("package.Class") as Class;
var ClassInstance = new ExternalClass();
var NeededFunction:Function = ClassInstance["NeededFunction"] as Function;
var response:String = NeededFunction(param);

Now, I need to extend the functionality of NeededFunction (which is a public method)... I know it's possible to override public methods, but how would I go about this with a dynamically loaded class?

I was thinking I could do something like this, but it doesn't work:

var ClassInstance["NeededFunction"] = function(param1:uint):String { 
    var newString = "Your number is: "+param1.toString();  //New functionality
    return newString;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

说好的呢 2024-09-22 22:56:11

处理此问题的另一种方法是将这些类放在两个 SWF 都可以访问的包中。只需将类的根文件夹添加到您的 Actionscript path 中即可。

您无需使用 getDefinitionByName 获取类,只需导入它即可。至于重写,您可以创建一个类来重写其中一个类,也可以创建一个接口。

import com.yourlocation.ExternalClass;

var external:ExternalClass = new ExternalClass();

Another way to deal with this could be to have the classes in a package that's accessible by both SWFs. Just add the classes' root folder to your Actionscript path .

Instead of getting a class by using getDefinitionByName , you simply import it. As for overriding , you can create a Class that overrides one of the classes , or you can create an Interface.

import com.yourlocation.ExternalClass;

var external:ExternalClass = new ExternalClass();

黑色毁心梦 2024-09-22 22:56:11

使用 FlashDevelop 修复这个问题非常简单。

右键单击项目列表中包含的 SWC。
选择选项然后“包含库(完整库)”。

..您现在可以使用 getDefinitionByName 从 swc 文件中获取未引用的类。

Using FlashDevelop this is pretty simple to fix.

Right click your included swc from the Project list.
Choose options then "include library (complete library)".

..you can now use getDefinitionByName to get a unreferenced class from your swc file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文