0

我有 2 个动态命名的 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+();” .
  • NB 2:我不想使用“EVAL”语法

感谢您的任何解决方案..

4

3 回答 3

10

如果函数是全局可访问的,您可以编写

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 开始)。

于 2013-08-14T07:28:56.387 回答
2

如果它们是全局函数,您可以执行以下操作:

window['a' + i]()

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

eval('a' + i)()

JavaScript 不为您提供通过对象访问当前范围内的变量的权限(Python 使用locals()and执行此操作globals()),因此eval如果您无法重写该代码,这是您唯一的选择。

于 2013-08-14T07:28:46.287 回答
1

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

for(var i= 1; i <= 3; i++){
    window['a' + i]()
}
于 2013-08-14T07:28:48.040 回答