2011-06-16 69 views
2

我有一個要求,我得到了錨標籤ID,並根據id我確定哪些函數來執行..所以有什麼,五星級下面的代碼有沒有像返回一個函數?

function treeItemClickHandler(id) 
{ 
a=findDisplay(id); 
a(); 
} 
+0

你爲什麼不乾脆通過使用'之開關或一些'如果else'語句檢查ID,並執行基於該功能? – Kokos 2011-06-16 11:42:50

回答

1

當然,功能第一類對象在JavaScript。例如,您可以創建一個圖表(對象)持有的函數的引用您要撥打:

var funcs = { 
    'id1': function(){...}, 
    'id2': function(){...}, 
    ... 
}; 

function treeItemClickHandler(id) { 
    if(id in funcs) { 
     funcs[id](); 
    } 
} 

隨着功能的任何其他值處理,您還可以從另一個函數返回他們:

function findDisplay(id) { 
    // whatever logic here 
    var func = function() {}; 

    return func; 
} 
+0

@Felix:根據我的代碼,你可以解釋它,這是對我來說是全新的東西..和映射的概念是好東西在這裏 – abi1964 2011-06-16 11:44:23

+0

@Ahhishek:你想解釋什麼? – 2011-06-16 11:45:00

+0

@Felix:所以當FindDisplay返回a時,這個a將是一個函數,取決於map ..其中'a()'被FindDisplay()返回的任何函數替換,並且可以像往常一樣調用? – abi1964 2011-06-16 11:49:02

2

您可以將功能類似一個變量因此: 您也可以從函數返回函數指針 - 請參閱findDisplay(id)的return語句。

function treeItemClickHandler(id) 
{ 
var a= findDisplay; 
var other = a(id); 
other(); 
} 

function findDisplay(id) 
{ 
    return someOtherThing; 
} 

function someOtherThing() 
{ 

} 
+0

我的意思是'findDisplay'返回一個函數,並且該函數存儲在另一個函數 – abi1964 2011-06-16 11:41:28

+0

據此更新:) – Nathan 2011-06-16 11:43:34

+0

感謝您回答 – abi1964 2011-06-16 11:59:04

1

函數是正常的javascript值,所以你可以傳遞它們,(重新)將它們分配給變量,並將它們用作參數值或函數返回值。只要使用它們;)你的代碼到目前爲止是正確的。

+0

感謝您的解釋 – abi1964 2011-06-16 11:59:31

1

您可以通過多種方式在ID和函數之間進行映射。

其中一個比較簡單的方法是創建一個對象映射id到函數,並找到從該對象調用的函數(這實際上是一個更好看的switch語句)。

例子:

function treeItemClickHandler(id) 
{ 
    var idMap = { 
     "some-id": findDisplay, 
     "another-id": doSomethingElse 
    }; 

    if (!idMap.hasOwnProperty(id)) { 
     alert("Unknown id -- how to handle it?"); 
     return; 
    } 

    // Call the corresponding function, passing the id 
    // This is necessary if multiple ids get handled by the same func 
    (idMap[id])(id); 
} 

function findDisplay(id) 
{ 
    // ... 
} 

function doSomethingElse(id) 
{ 
    // ... 
} 
+0

謝謝..每1的答案幫助我,你的也 – abi1964 2011-06-16 11:58:09

+0

你能給我一些解決方案[這個問題](http://stackoverflow.com/questions/6376161/what-or-which-plugin-在-jQuery的款,我使用到填充-A-HTML表上帶有一個XML的網絡連接)?謝謝 – abi1964 2011-06-17 08:24:46