2012-07-16 57 views
0

如果我成立了一個接受一個回調函數:AS3 - 檢查回調函數是否符合某些參數標準?

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

這回調應該接受一個給定的類型,例如一個字符串來表示一些加載的信息:

function onLoaded(response:String):void; 

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

是否有可能評估將用於回調的函數,並確保它具有給定數量的參數並且參數接受正確的類型?例如

function broken(arg:Sprite):void; 

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

回答

2

我不認爲你應該打擾做這種檢查,因爲它會造成一個不必要的開銷。

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

如果你真的想要做的檢查,你也許可以使用反射來做到這一點:當你做回調,您可以簡單地拋出異常。只需從flash.utils調用describeType(callback)並解析XML即可。你可以做

+0

描述類型不反映閉包功能。 – 2012-07-16 09:02:54

-1

一件簡單的事情是通過調用方法一樣關閉length屬性來檢查可接受參數的個數:

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

trace(some.length); // traces 2 

其他更復雜的方法可能是使用AS3Commons bytecode library。你可以試用dynamic proxies

+0

它看起來像AS3Commons字節碼庫只適用於原始字節碼,並且我不認爲腳本可以在運行時訪問它自己的字節碼。 – 2012-07-16 09:38:51

相關問題