1

を介して動的にClass'を呼び出したい。次のコードでは、を介して動的に'を呼び出すことができます。PropertyStringClassFunctionString

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ためです。myPropertyFunction

sを介してこれを動的に行う方法はありますStringか?

助けてくれてありがとう。

4

2 に答える 2

2

この問題を解決するには、単に()コードから を削除する必要がありました。つまり、新しいコードは次のようになります。

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

Answer of Alex は確かに適切に機能しますが、文字列が適切に記述されている場合に限ります。そうしないと、このエラーがスローされます。TypeError: Error #1006: value is not a function.これを回避するには、プロパティまたはメソッドが定義されているかどうかを使用する前にテストしてみてください。そのようです:

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

とにかく、特定の例ではゲッターをリクエストしているため、()ソースからを削除する必要がありました。メソッドが必要な場合は、メソッドを関数として保存することもお勧めします。

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

そして、callまたはapplyメソッドのいずれかを使用します。

myFunction.call(null, myParam);

オブジェクトが持つすべてのメソッドを調査し、それらを文字列と比較することに興味がある場合。以下も考慮してください。

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

<method/>ノードの属性は次のとおりです。

  • name : メソッドの名前。
  • definedBy : メソッド定義を含むクラス。
  • returnType : メソッドの戻り値のデータ型。

これがお役に立てば幸いです。役に立った場合はお知らせください。

于 2012-08-01T07:56:05.647 に答える