如何在Javascript中使用for调用动态命名的方法

时间:2013-08-14 07:27:05

标签: javascript jquery dynamic-function

我有两个动态命名的JavaScript函数。

function a1(){
   //some codes
}

function a2(){
   //some codes
}

function a3(){
   //some codes
}

以上由PHP生成的函数肯定..

<?php 
  for($i = 1; $i <= $load_period->count; $i++){ 
?>
  <script type="text/javascript">
  function a<?php echo $i;?>(){
     //javascript functions
  }
  </script>
<?php 
  } 
?>

现在我必须用for ..

调用这两个函数
for(var i= 1; i <= 3; i++){
   // here the solution code .. 
   // doesn't work >> a+i+();
}
  • 注意1:它不适用于“a + i +();” 。
  • 注意2:我不想使用“EVAL”语法

感谢任何解决方案..

3 个答案:

答案 0 :(得分:9)

如果功能可全局访问,您可以编写

window['a'+i]()

否则,您可以重写代码以将所有函数添加到一个变量中:

var f = {
    a1: function() { },
    a2: function() { },
    a3: function() { }
};

...并致电f['a'+i]()

如果你正在重写,因为所有函数都是由索引命名的,你也可以写:

var myFunctions = [
  function() { },
  function() { },
  function() { }
];

...并致电myFunctions[i]()。 (当然,正如Felix Kling在评论中指出的那样,i这里必须调整为0基础。)

答案 1 :(得分:1)

如果他们具有全局功能,您可以执行以下操作:

window['a' + i]()

否则,您必须使用eval(坦率地说,这是eval的完美用例,因为没有其他方法可行):

eval('a' + i)()

JavaScript没有通过对象为您提供对当前作用域中变量的访问权限(Python使用locals()globals()执行此操作),因此eval是您唯一的选择,如果你不能重写该代码。

答案 2 :(得分:0)

如果方法在全球范围内,那么

for(var i= 1; i <= 3; i++){
    window['a' + i]()
}