我们如何动态调用函数。我试过下面的代码:
public function checkFunc() : void
{
Alert.show("inside function");
}
public var myfunc:String = "checkFunc";
public var newFunc:Function=Function(myfunc);
newFunc();
但它给出了错误:
调用可能未定义的方法 newFunc。
代替newFunc()
,我尝试将其称为this[newFunc]()
,但这会引发错误:
此关键字无法使用 静态方法。它只能用于 实例方法,函数闭包, 和全球代码
有关动态调用函数的任何帮助吗?
答案 0 :(得分:5)
函数的工作方式与属性相同,您可以按照分配变量的方式分配它们,这意味着所有时髦的方括号技巧也适用于它们。
public function checkFunc() : void
{
Alert.show("inside function");
}
public var myfunc:String = "checkFunc";
public var newFunc:Function = this[myfunc];
newFunc();
答案 1 :(得分:3)
从taskinoor's answer到this question:
instance1[functionName]();查看this了解详细信息。
答案 2 :(得分:2)
代码未经测试但应该有效
package {
public class SomeClass{
public function SomeClass( ):void{
}
public function someFunc( val:String ):void{
trace(val);
}
public function someOtherFunc( ):void{
this['someFunc']('this string is passed from inside the class');
}
}
}
// usage
var someClass:SomeClass = new SomeClass( );
someClass['someFunc']('this string is passed as a parameter');
someClass.someOtherFunc();
// mxml example
// Again untested code but, you should be able to cut and paste this example.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="someOtherFunc( )" >
<mx:Script>
<![CDATA[
public function someFunc( val:String ):void{
trace(val);
this.theLabel.text = val
}
public function someOtherFunc( ):void{
// this is where call the function using a string
this['someFunc']('this string is passed from inside the class');
}
]]>
</mx:Script>
<mx:Label id="theLabel" />
</mx:Application>
答案 3 :(得分:1)
flash中的函数是Objects,就像任何对象一样。 AS3 api显示函数具有call()方法。你的代码非常接近:
// Get your functions
var func : Function = someFunction;
// call() has some parameters to achieve varying types of function calling and params
// I typically have found myself using call( null, args );
func.call( null ); // Calls a function
func.call( null, param1, param2 ); // Calls a function with parameters