我想通过Class
动态调用Property
的{{1}}。在以下代码中,我可以通过String
动态调用Class
的{{1}}。
Function
其中String
定义为:
var myClass:Class = getDefinitionByName("myPackage.MyClass") as Class;
myClass["myStaticMethod"]();
但是,MyClass
,package 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
动态执行此操作?
感谢您的帮助。
答案 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"];
然后使用call
或apply
方法。
myFunction.call(null, myParam);
如果您有兴趣研究Object拥有的所有方法并将它们与String进行比较。还要考虑一下:
var child:Sprite = new Sprite();
var description:XML = describeType(child);
var methodList: XMLList = description.descendants('method');
<method/>
节点的属性为:
我希望这会有所帮助,如果您发现它有用,请告诉我。