2017-10-05 14 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

関連する問題