![js如何将字符串作为函数名调用函数,第1张 js如何将字符串作为函数名调用函数,第1张](/aiimages/js%E5%A6%82%E4%BD%95%E5%B0%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BD%9C%E4%B8%BA%E5%87%BD%E6%95%B0%E5%90%8D%E8%B0%83%E7%94%A8%E5%87%BD%E6%95%B0.png)
比如我现在有一个字符串str = "func_abc",func_abc是一个函数名,我现在知道str如何调用str这个字符串表示的函数.思路:1、用eval函数,字符串转换为命令行执行都可以通过eval函数。2、如果函数不多,可以通过if等方式进行判断,执行不同的分支。代码示例:function func_abc(){alert('a')}var str = "func_abc"eval(str+"()")//执行func_abc()函数将其用到实际项目中:<!DOCTYPE html><html><head><meta charset="UTF-8"><title>将字符串作为函数名调用函数</title></head><body><span>指标:</span><select id="zhibiao"><option selected="" value="总体">总体</option><option value="queryManagementVolume">办理量</option><option value="queryTimeConsuming">平均耗时</option><option value="queryOvertimePercent">超时占比</option></select></body><script src="../js/jquery.js"></script><script>$(document).on("change",'select#zhibiao',function(){ var fn=$(this).val() /* fn()*/ eval(fn+"()")})function queryManagementVolume(){ console.log("查询办理量")}function queryTimeConsuming(){ console.log("查询平均耗时")}function queryOvertimePercent(){ console.log("查询超时占比")}</script></html>
方案只有一种:
通过eval方式把字符串转换为命令方式,执行字符串型方法函数。
示例
<script>
function func(a){//定义一个待参数的函数
alert(a)
}
eval('func()')//调用函数不传入参数
eval('func("bcd")')//调用函数,传入参数
</script>
可以使用js的eval函数实现,示例如下:
<script type="text/javascript">
//自定义函数,用于弹出三个参数的值
function alertFunc(str1,str2,str3){
alert(str1)
alert(str2)
alert(str3)
}
//自定义函数:根据传入的函数名,调用函数
function callAlert(functionName){
//根据函数名得到函数类型
var func=eval(functionName)
//创建函数对象,并调用
new func(arguments[1],arguments[2],arguments[3])
}
</script>
<!--编写按钮,在点击事件中调用函数-->
<button onclick="callAlert('alertFunc','tom','hello','world')" >测试函数调用</button>