此AS3功能适用于常规方法和getter方法:
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
第三个调用不起作用(抛出异常)。 我怎样才能使它适用于setter方法呢? 谢谢!
编辑:
这是一个有效的版本,除了具有附加参数的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;
}
答案 0 :(得分:1)
Setter函数用作变量,因此您不能以这种方式使用它:
myProperty.call( "new value" );
您对变量的函数毫无意义,因为您只需要进行值赋值:
myProperty = "new value";
顺便说一下,你可以通过两种方式将它包含在你的函数中:
答案 1 :(得分:0)
您当前只传递一个值为“new value”的字符串
这应该可以解决问题:
this.MyClassTestAPI("MyProperty", "new","value");
有关此事项的更多信息,请访问Adobe LiveDocs: http://livedocs.adobe.com/flex/3/html/help.html?content=03_Language_and_Syntax_19.html
干杯