2017-10-05 79 views
1

我有一個包含一堆函數名稱的數組。我沒有將函數存儲在一個對象中。使用字符串名稱從數組中運行函數

for (i = 0; i < view_functions.length; i++) { 
    view_functions[i](); 
} 

這不行,有什麼想法?

謝謝。

+0

你可以自己存儲函數嗎? –

+0

https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string – Peter

+0

如果數組存儲名稱字符串,則不能稱之爲那些。請發佈完整的代碼,顯示「view_functions」是什麼以及函數在哪裏定義。 – Bergi

回答

0

您發佈的代碼有效,因此定義函數的代碼可能不太正確。這是一個完全可行的例子。

function yep() { 
 
    alert('Yep'); 
 
} 
 

 
function again() { 
 
    alert('Again'); 
 
} 
 

 
var view_functions = [ 
 
    yep, 
 
    again 
 
]; 
 

 
for (var i = 0; i < view_functions.length; i++) { 
 
    view_functions[i](); 
 
}

如果你想獲得一點的設計有助於在你的代碼,你可以介紹一家工廠。這有明確的未知函數名稱的附加好處。

function yep() { 
 
    alert('Yep'); 
 
} 
 

 
function again() { 
 
    alert('Again'); 
 
} 
 

 
function functionFactory(name) { 
 
    switch (name) { 
 
     case 'yep': 
 
      return yep; 
 
     case 'again': 
 
      return again; 
 
     default: 
 
      throw `${name} not a known function in functionFactory`; 
 
    } 
 
} 
 

 
var view_functions = [ 
 
    'yep', 
 
    'again' 
 
]; 
 

 

 
for (var i = 0; i < view_functions.length; i++) { 
 
    var func = functionFactory(view_functions[i]); 
 
    func(); 
 
}

如果你只有串名字,我建議不使用字符串名稱...但你可以去充滿邪惡和使用eval ...

function yep() { 
 
    alert('Yep'); 
 
} 
 

 
function again() { 
 
    alert('Again'); 
 
} 
 

 
var view_functions = [ 
 
    'yep', 
 
    'again' 
 
]; 
 

 
for (var i = 0; i < view_functions.length; i++) { 
 
    var n = view_functions[i] + '()'; 
 
    eval(n); 
 
}

但是,爲什麼不把實際功能存儲在數組中。

+0

不知道爲什麼有人低估了這一點。它確實有效。 – agm1984

+0

有些人只是喜歡投票它似乎工作正常 – schylake

+0

「我有一個數組,有一堆函數名稱,我不存儲函數的對象。」這實際上並不回答所問的問題。 – smarx

相關問題