如何将数字附加到函数名称以创建许多函数?

时间:2009-08-03 00:43:31

标签: javascript

我有一个功能,负责一些验证,禁用和启用一些文本框和一组单选按钮....

现在我想使用for循环生成要从另一个函数调用的函数名,然后将for循环索引附加到有问题的函数中....

像这样......

function unCheckRadio(num) 
{
  var cont = num;
  var form = document.angular;

  for (var i = 0; i < cont; i++) 
  {
     alert(form['lim_set'+i].length);
     for(var j = 0; j < form['lim_set'+i].length; j++ )
     {
       form['lim_set'+i][j].checked = form['lim_set'+i][j].defaultChecked;
     }
     makeChoice_ang();
  }

}

这里我想将索引i附加到makeChoice_ang()函数....

尝试了许多方法......但是没有去......

我尝试使用这个....'makeChoice_ang'+ i;

但这使它成为一个字符串......

请帮助我或至少指出我正确的方向....

提前感谢一百万人!

5 个答案:

答案 0 :(得分:5)

我将此作为一个不同的答案添加,因为,它是不同的!

如果你想调用一个全局函数(或任何你知道其范围的函数)给出这样的后缀,那么你可以使用数组表示法:

window['makeChoice_ang' + i]();

记住...... eval是邪恶的mostly

答案 1 :(得分:3)

似乎将makeChoice_ang()重新作为接受索引作为参数的泛型函数会更容易。或者,如果您无法更改功能,或者行为因功能而异,您可以使用eval()来评估您的字符串。

答案 2 :(得分:2)

创建一个将函数放入的对象。为每个'makeChoice_ang'+ i函数在此对象中创建一个方法。然后,您可以通过该对象调用这些函数。

var f = {
   makeChoice_ang1: function(){
      alert('1');
   },
   makeChoice_ang2: function(){
      alert('2');
   }
}

for(var i = 1; i < 3;i++)
   f['makeChoice_ang' + i]();

答案 3 :(得分:1)

如果我理解你正在尝试做什么:

eval('makeChoice_ang'+i+'()');

这将调用由该字符串连接创建的函数。如果i = 5,则会调用makeChoice_ang5()

答案 4 :(得分:0)

在javascript中,函数被视为普通变量,就像字符串或int一样。显然它们有一些额外的功能,但你可以以相同的方式使用它们,例如,你可以在一个数组中存储许多函数,或者将一个函数传递给另一个函数。鉴于此,我看不出有任何需要以你想要的方式命名函数。

我希望我能为你的具体问题提供更多帮助,但这有点难以理解,抱歉。

您可以尝试更改unCheckRadio功能,以便将函数作为参数:

function unCheckRadio(num, func) { ... }

然后你会这样称呼它:

function unCheckRadio(5, function() {
    // do whatever here.
});