2012-09-06 149 views
1

我想將函數「testMath」的名稱作爲字符串傳遞給名爲「runTest」的包裝函數作爲參數。然後在'runTest'裏面我會調用傳遞的函數。我這樣做的原因是因爲我們有一組通用數據,無論測試如何,都會將其填充到變量中,然後根據用戶想要測試的內容調用特定的測試。我正在嘗試使用javascript/jquery來做到這一點。事實上,這個函數要複雜得多,包括一些Ajax調用,但是這個場景強調了基本的挑戰。如何將函數的名稱作爲參數傳遞,然後再引用該函數?

//This is the wrapper that will trigger all the tests to be ran 
function performMytests(){ 
    runTest("testMath"); //This is the area that I'm not sure is possible 
    runTest("someOtherTestFunction"); 
    runTest("someOtherTestFunctionA"); 
    runTest("someOtherTestFunctionB"); 
} 


//This is the reusable function that will load generic data and call the function 
function runTest(myFunction){ 
    var testQuery = "ABC"; 
    var testResult = "EFG"; 
    myFunction(testQuery, testResult); //This is the area that I'm not sure is possible 
} 


//each project will have unique tests that they can configure using the standardized data 
function testMath(strTestA, strTestB){ 
    //perform some test 
} 

回答

6

你需要函數名稱作爲字符串嗎?如果沒有,你可以傳遞給函數是這樣的:

runTheTest(yourFunction); 


function runTheTest(f) 
{ 
    f(); 
} 

否則,您可以撥打

window[f](); 

這工作,因爲一切都在「全球」範圍實際上是window對象的一部分。

2

內runTests,使用這樣的:

window[functionName](); 

確保testMath在全球範圍內,雖然。

1

我preffer使用應用/呼叫的方式傳遞PARAMS時:

... 
myFunction.call(this, testQuery, testResult); 
... 

更多信息here

+0

我可以看到這可能會更清潔,但不幸的是,適用於我的方案不起作用。 – silvster27

相關問題