2014-08-28 146 views
0

我生成中,我创建几个函数用于存储值调用JavaScript函数动态

function get[dynamicname](){ 
    return "some value"; 
} 

我想调用另一个函数这种方法来获得的所有函数值我创建

动态JavaScript我有我用来创建在我打电话的函数的函数的所有dynamicnames ..

function getallfunctionvals(){ 
    for (var i = 0; i < array.length; i++) { 
     var s="get"; 
     var ss="()"; 
     console.log(s+array[i]+ss); 
    } 
} 

这就是我如何调用动态发电机密封编功能,但是在控制台中我得到的函数名作为字符串不是值里面

+1

如果函数在全局范围内,那么你可以使用'eval(s + array [i] + ss)' - http://stackoverflow.com/questions/86513/why-is-using-the-javascript- eval-function-a-bad-idea – 2014-08-28 06:37:32

+1

但是他不应该。使用函数图,不要在全局范围内定义函数。 – 2014-08-28 06:37:57

+2

同意,'window [dynamic]'不是**解决方案,也不是'eval'。这看起来像一个常见的XY问题。 – elclanrs 2014-08-28 06:40:33

回答

0

如果定义函数是在gloabal的范围,你可以使用

window[s+array[i]]() 

所以,如果你有一个像getName功能。它会做什么它会打电话像

window["getName"](); 
0

嗨看看This后。

一个答案的:

,如果你知道它的一个全球性的功能,您可以使用:

var functPtr = window[func_name]; 
//functPtr() 

否则包含该函数的父对象替换窗口。

0

你可以使用eval函数。例如。

  var s = eval("function get(){}; gat();"); 
+1

eval函数是邪恶的 – 2014-08-28 06:41:20

0

首先:

function get[dynamicname](){ 
return "some value"; 
} 

将生成错误:语法错误:意外标记[

由于 “[” 未在javascript函数名和变量允许的。

但你可以这样做:

function getName() {console.log('Name')}; 
function getAge () {console.log('Age')}; 

当你调用上述功能,你可以这样做:

var s="get"; 
var thingToGet = "Name"; 
var ss="()"; 

eval(s + thingToGet + ss) 

我有没有回答你的问题?