2011-06-16 107 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