Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在flash AS3中使用未知数量的参数动态调用方法?_Flash_Actionscript 3_Oop - Fatal编程技术网

如何在flash AS3中使用未知数量的参数动态调用方法?

如何在flash AS3中使用未知数量的参数动态调用方法?,flash,actionscript-3,oop,Flash,Actionscript 3,Oop,我有一个对象MyTester,它有另一个类MyClass的实例, 我想通过它来测试MyClass API: public class MyTester { internal var myObj:MyClass; public function MyTester() { this.myObj = new MyClass(); trace(this.MyClassTestAPI("Foo", "arg1", arg2)); // tests fun

我有一个对象MyTester,它有另一个类MyClass的实例, 我想通过它来测试MyClass API:

public class MyTester {
   internal var myObj:MyClass;

   public function MyTester() {
        this.myObj  = new MyClass(); 

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

   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;                
    }
}
如何取消开关并使其适用于任意数量的参数?
谢谢

使用
函数.apply()
方法。它与
调用
类似,但是您可以将参数作为
数组
传递。比如:

function doCall( callback:Function, ... args ):void
{
    // args is now an array
    callback.apply( null, args );
}


// call it like this
this.doCall( this._myFunc1, 1.0 );
this.doCall( this._myFunc2, 1.0, 2.0 );
this.doCall( this._myFunc3, 1.0, 2.0, "hello" );

// to call these functions
private function _myFunc1( num:Number ):void {}
private function _myFunc2( num:Number, num2:Number ):void {}
private function _myFunc3( num:Number, num2:Number, msg:String ):void {}
()