在AS3中动态调用属性

时间:2012-07-31 16:56:57

标签: string actionscript-3 flash dynamic properties

我想通过Class动态调用Property的{​​{1}}。在以下代码中,我可以通过String动态调用Class的{​​{1}}。

Function

其中String定义为:

var myClass:Class = getDefinitionByName("myPackage.MyClass") as Class;
myClass["myStaticMethod"]();

但是,MyClasspackage myPackage { public class MyClass { public function MyClass() {} public function myMethod():void {}; public static function myStaticMethod():void {}; public static function get myProperty():Object { return null; } } } 不是Property。所以,

MyClass.myProperty

引发错误:Function因为var myClass:Class = getDefinitionByName("myPackage.MyClass") as Class; myClass["myProperty"](); 不是TypeError: Error #1006: value is not a function

有没有办法通过myProperty动态执行此操作?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

要解决此问题,我只需要从代码中删除()即可。也就是说,新代码如下:

var myClass:Class = getDefinitionByName("myPackage.MyClass") as Class;
myClass["myProperty"]; // This works.

答案 1 :(得分:2)

Alex的答案确实会正常工作,但前提是你正确编写了String。否则,您会收到此错误:TypeError: Error #1006: value is not a function.为避免这种情况,您可以尝试在使用之前测试属性或方法是否已定义。像这样:

if(myClass["myProperty"] != undefined) 
{
...
}

无论如何,在您的具体示例中,您要求获取getter,这就是您必须从源中删除()的原因。如果您需要一个方法,我还建议您将该方法保存为函数:

var myFunction: Function = myClass["theFunction"];

然后使用callapply方法。

myFunction.call(null, myParam);

如果您有兴趣研究Object拥有的所有方法并将它们与String进行比较。还要考虑一下:

var child:Sprite = new Sprite();
var description:XML = describeType(child);
var methodList: XMLList = description.descendants('method');

<method/>节点的属性为:

  • 名称:方法的名称。
  • declaredBy :包含方法定义的类。
  • returnType :方法返回值的数据类型。

我希望这会有所帮助,如果您发现它有用,请告诉我。