我有一個包含一堆函數名稱的數組。我沒有將函數存儲在一個對象中。使用字符串名稱從數組中運行函數
for (i = 0; i < view_functions.length; i++) {
view_functions[i]();
}
這不行,有什麼想法?
謝謝。
我有一個包含一堆函數名稱的數組。我沒有將函數存儲在一個對象中。使用字符串名稱從數組中運行函數
for (i = 0; i < view_functions.length; i++) {
view_functions[i]();
}
這不行,有什麼想法?
謝謝。
您發佈的代碼有效,因此定義函數的代碼可能不太正確。這是一個完全可行的例子。
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);
}
但是,爲什麼不把實際功能存儲在數組中。
你可以自己存儲函數嗎? –
https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string – Peter
如果數組存儲名稱字符串,則不能稱之爲那些。請發佈完整的代碼,顯示「view_functions」是什麼以及函數在哪裏定義。 – Bergi