私は関数名の束を持つ配列を持っています。私はオブジェクトに関数を格納していません。配列から文字列名を使用して関数を実行する
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