AS3 - 检查回调函数是否符合某些参数标准?

时间:2012-07-16 03:37:02

标签: actionscript-3 callback

如果我设置了一个接受回调的函数:

function loadSomething(path:String, callback:Function):void;

并且该回调应该接受给定的类型,例如String来表示一些加载的信息:

function onLoaded(response:String):void;

// Load some data into onLoaded.
loadSomething("test.php", onLoaded);

是否可以评估将用于回调的函数,并确保它具有给定数量的参数并且参数接受正确的类型? e.g。

function broken(arg:Sprite):void;

// This should throw an error.
loadSomething("test.php", broken);

2 个答案:

答案 0 :(得分:2)

我认为你不应该费心去做这种检查,因为它会造成不必要的开销。您可以在执行回调时抛出异常:

try {
    doCallback(response);
} catch(e:*) {
    trace('Incompatible callback');
}

如果您真的想要进行检查,您可以使用反射来完成检查。只需从describeType(callback)调用flash.utils并解析XML。

答案 1 :(得分:-1)

您可以做的一件简单事情是通过在方法闭包上调用length属性来检查可接受参数的数量,如:

function some ( val1 : int, val2 : int ) : void { return; }

trace(some.length); // traces 2

其他更复杂的方法可能是使用AS3Commons bytecode library。您可以试用dynamic proxies