2014-02-21 81 views
0

能否請你幫我帶一個環帶功能:JavaScript函數作爲循環變量

我有7個功能:

function menu1(){}; 
function menu3(){}; 
function menu4(){}; 
function menu5(){}; 
function menu6(){}; 
function menu7(){}; 

而我需要做的是負載的功能menux( ){} 我的意思是從循環如果x == 3加載函數menu3()。

for(x=1;x=8;=x++) 
{ 
    function menux(){}; 
} 
+3

難道你不能只使用'功能菜單(num){..}'? – George

+0

沒有辦法讓一個* single * menu函數接受一個「menuNumber」參數? –

+0

'menu2'發生了什麼? :) – starsplusplus

回答

1

你可以用你的函數到一個對象:

function menu1(){}; 
function menu3(){}; 
function menu4(){}; 
function menu5(){}; 
function menu6(){}; 
function menu7(){}; 

var wrap={ 
    menu1:menu1; 
    menu3:menu3; 
    menu4:menu4; 
    menu5:menu5; 
    menu6:menu6; 
    menu7:menu7; 
} 

然後,你可以cosume是到了:

for(x=1;x=8;=x++) 
{ 
    if(!wrap["menu"+i]) wrap["menu"+i](); 
} 

有很多的這樣做的方法,你也可以這樣做:

function menu(int num){ 
switch(num) 
    { 
    case 1: 
    menu1(); 
    break; 
    case 2: 
    menu2(); 
    break; 

    //.... 
    } 
} 

我希望它有幫助。

0

你應該解釋一下你的情況以及你想要在更大的圖景中達到什麼目的。這似乎已經不是最理想的方法。但是好了,在這裏你去:

for(var x=1; x<8; x++) 
{ 
    window['menu' + x](); 
} 

Assumuing你的函數聲明在全局命名空間,這個循環會調用這些函數都從menu1menu7

0

你應該問自己 - 如果有不同的方式。當然是!

  1. 我建議你做它接受一個參數,並且也基於它像一個功能: function menu(x) {...}

  2. 如果第一個選項不可用你,我會建議你做實施使用這些方法的對象是這樣的: var methods = { menu1: function() {}, menu2: function() {}, menu3: function() {}, ... }

  3. 使用eval。請不要這樣做。 Eval是強大的,但在這種情況下,它是一個矯枉過正。