1

我想通过 a 动态Class调用Propertya String。在下面的代码中,我可以通过 a 动态Class调用Functiona 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; }
    }
}

但是, a Property,例如MyClass.myProperty不是 a Function。所以,

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

引发错误:TypeError: Error #1006: value is not a function因为myProperty不是Function.

有没有办法通过Strings 动态地做到这一点?

谢谢您的帮助。

4

2 回答 2

2

为了解决这个问题,我只需()要从代码中删除 。也就是说,新代码如下所示:

var myClass:Class = getDefinitionByName("myPackage.MyClass") as Class;
myClass["myProperty"]; // This works.
于 2012-07-31T17:16:31.230 回答
2

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

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

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

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

然后使用callapply方法。

myFunction.call(null, myParam);

如果您有兴趣研究对象具有的所有方法并将它们与字符串进行比较。还要考虑:

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

<method/>节点的属性是:

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

我希望这会有所帮助,如果你觉得它有用,请告诉我。

于 2012-08-01T07:56:05.647 回答