2012-01-18 85 views
3

说我正在使用一些html5数据字符,我想知道什么函数调用时说一些特定的div标记完成。字符串函数javascript

所以我的数据会看起来像

data-callback='jsAPI.aSubset.desiredFunction' 

我将如何转换该回调(字符串),到我要调用的函数。一个简单的全局函数,如

data-callback='_myfunction' 

<script> 
    function _myfunction() { alert("yes my function"); } 
    $("div").click(function() { 
     var fn = $(this).data("callback"); 
     if (typeof fn === 'function') { 
      fn(); 
     } 
    }) 
</script> 

但我如何与前一个jsAPI.aSubset.desiredFunction由于做

回答

2

用方括号,如果你没有.链才有效。

试试这个:

var elms = fn.split("."); 
var curr = window; 
var nxt; 
while(nxt = elms.shift()) curr = curr[nxt]; 
curr(); 
0

尝试window[fn]()如果函数是在全球范围内定义。

1

使用方括号...

jsAPI.aSubset[fn](); 

所以......

if (typeof jsAPI.aSubset[fn] === 'function') { 
    jsAPI.aSubset[fn](); 
} 
+0

我说这个项目是一个字符串......你只是在字符串中调用函数,就好像我可以奇迹般地知道要调用什么。 – Michael 2012-01-18 23:18:45

+0

我应该澄清一下,你在'data-callback'属性中需要/想要的是实际函数名'desiredFunction'。如果你事先不知道对象嵌套,那么你会想要[@ Kolink's answer](http://stackoverflow.com/a/8918903/1106925)。 – 2012-01-18 23:19:24

+0

@Michael:为什么事先知道使用哪个子集会是神奇的? – 2012-01-18 23:21:08

4

听起来像一个伟大的使用情况进行了可怕的eval()

我会做这样的事情:

var fnString = "jsAPI.aSubset.desiredFunction"; 
var fn = eval(fnString); 
if (typeof(fn) === "function") { 
    fn.apply(); 
1

您可能希望只使用Function("functionstring")。函数函数从字符串中返回一个函数。