我有两个动态命名的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+();
}
感谢任何解决方案..
答案 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]()
}