0

你能帮我一个循环的功能吗:

我有 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(){};
}
4

3 回答 3

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;
}

然后,您可以将其包含在 for 中:

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;

   //....
  }
}

我希望它有所帮助。

于 2014-02-21T12:31:31.273 回答
0

您可能应该解释您的情况以及您想要在更大的范围内实现的目标。这似乎已经是一种次优的方法。但是,好吧,给你:

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

假设您的函数声明位于全局命名空间中,此循环将从menu1to调用所有这些函数menu7

于 2014-02-21T12:29:03.203 回答
0

你应该问问自己——是否有不同的方式。当然是!

  1. 我建议您创建一个接受参数并基于它执行某些操作的函数,例如: function menu(x) {...}

  2. 如果第一个选项对您不可用,我建议您使用这些方法实现一个对象,如下所示: var methods = { menu1: function() {}, menu2: function() {}, menu3: function() {}, ... }

  3. 使用eval. 在这种情况下请不要这样做。Eval 是强大的,但在这种情况下它是一个矫枉过正。

于 2014-02-21T12:29:19.530 回答