0

2 つの別々.swfAとの間でリクエストを送信する必要がありBます。私は次の方法でinterface、を持っIRequestています:

public interface IRequest {
    function get packagePath():String;
    function get className():String;
    function get functions():Vector.<String>;
    function get parameters():Array;
    function execute():void;
}

クラスで実装しRequestます。次のように新しいリクエストを作成できます。 RequestManager.addToQueue(new Request("com.myPackage", "MyClass", "instance.method1.method2", "parameter"));

これによりRequest、指定されたpackageclass-name、list of functionsおよびで新しい が作成されparametersます。

一連のfunction-call と、 afunctionが実際に afunctionまたはproperty( public function getMyThing():Objectvs public function get myThing():Object) であるかどうかを判断すると、事態は複雑になります。

たとえば、目的が次の場合、物事は十分に単純Requestですnew Request("com.myPackage", "MyClass", "getInstance", "");

そのメソッドの呼び出しは次のように簡単です。

var theClass:Class = getDefinitionByName(packagePath + "." + className) as Class;
var theInstance:Object = theClass[functions[0]](); // Invokes com.myPackage.MyClass.getInstance()

ただし、これは/の場合getInstanceは機能しません。また、多数のメソッド呼び出しがある場合、1 回の呼び出しでチェーンを呼び出す方法がわかりません。例えば:propertygetter

var theClass:Class = getDefinitionByName(packagePath + "." + className) as Class;
var object = theClass[functions[0]]()[functions[1]()[functions[2](); // Invokes com.myPackage.MyClass.firstMethod.secondMethod.thirdMethod()

[ただし、これを動的に行う必要があり、それらを動的にチェーンする簡単な方法がわかりません]

からメソッドを呼び出すことができる良い方法を誰かが知っているならString、それは本質的に私がやりたいことです。

"com.myPackage.MyClass.firstMethod.secondMethod.thirdMethod()", parameters

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

4

1 に答える 1

1

その引数が関数を呼び出す前に実際に関数を保持しているかどうかを確認すると役立つと思います。

var theClass:Class = getDefinitionByName(packagePath + "." + className) as Class;

if(theClass[functions[0]] is Function){
    var theInstance:Object = theClass[functions[0]](); // Invokes com.myPackage.MyClass.getInstance()
}
于 2012-09-06T06:59:36.477 に答える