2014-08-28 166 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) 

我有沒有回答你的問題?