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

时间:2010-08-22 02:03:02

标签: actionscript-3 dynamic external

我有两个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;
}

2 个答案:

答案 0 :(得分:0)

处理这个问题的另一种方法是将类放在一个可由两个SWF访问的包中。只需将类的根文件夹添加到Actionscript路径即可。

您只需导入它,而不是使用getDefinitionByName获取类。至于覆盖,你可以创建一个覆盖其中一个类的类,或者你可以创建一个接口。


import com.yourlocation.ExternalClass;

var external:ExternalClass = new ExternalClass();

答案 1 :(得分:0)

使用FlashDevelop这很容易修复。

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

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