1

このAS3関数は、通常のメソッドとゲッターメソッドで機能します。

   public function MyClassTestAPI(functionName:String, ...rest):* {
    var value:*;            
        try {
            switch(rest.length) {
                case 0:
                    value = myObj[functionName];
                    break;
                case 1:
                    value = myObj[functionName].call(functionName, rest[0]);
                    break;
                case 2:
                    value = myObj[functionName].call(functionName, rest[0],rest[1]);
                    break;
                default:
                    throw("Cannot pass more than 2 parameters (passed " + rest.length + ")");
            }                
        } 
        return value;                
    }

使用例:

this.MyClassTestAPI("Foo", "arg1"); // tests function Foo(arg1:String):String
this.MyClassTestAPI("MyProperty");  // tests function get MyProperty():String
this.MyClassTestAPI("MyProperty", "new value");// tests function set MyProperty(val:String):void

3番目の呼び出しは機能しません(例外をスローします)。セッターメソッドでも機能させるにはどうすればよいですか?ありがとう!

編集:
これは、追加のパラメーターを持つgetterとsetterを除いて、機能するバージョンです。私のニーズには問題ありません:

   public function MyClassTestAPI(functionName:String, ...rest):* {
    var value:*;            
        try {
            if (typeof(this.mediaPlayer[functionName]) == 'function') {
                switch(rest.length) {
                case 0:
                    value = myObj[functionName].call(functionName);
                    break;
                case 1:
                    value = myObj[functionName].call(functionName, rest[0]);
                    break;
                case 2:
                    value = myObj[functionName].call(functionName, rest[0],rest[1]);
                    break;
                default:
                    throw("Cannot pass more than 2 parameters (passed " + rest.length + ")");
                }                
            }  else {
                switch(rest.length) {
                case 0:
                    value = myObj[functionName];
                    break;
                case 1:
                    myObj[functionName] = rest[0];
                    break;
                default:
                    throw("Cannot pass parameter to getter or more than one parameter to setter (passed " + rest.length + ")");
               }                
            }
        } 
        return value;                
    }
4

2 に答える 2

1

セッター関数は変数として機能するため、次のように使用することはできません。

    myProperty.call( "new value" );

値の割り当てを行うだけなので、変数の関数は無意味です。

    myProperty = "new value";

ちなみに、2つの方法で関数に含めることができます。

  1. 関数または変数であることを関数に伝える3番目のパラメーターを作成します
  2. catchセクションで値の割り当てを作成します
于 2011-07-04T11:30:12.280 に答える
0

現在、値が「新しい値」の文字列を1つだけ渡しています。

これでうまくいくはずです:

this.MyClassTestAPI("MyProperty", "new","value");

この問題の詳細については、次のAdobeLiveDocsを確認してください。http: //livedocs.adobe.com/flex/3/html/help.html?content = 03_Language_and_Syntax_19.html

乾杯

于 2011-07-04T11:15:06.047 に答える