怎么这样调用函数呢?


function aaa(){
  console.log('1')
}

var fnName = 'aaa'



[fnName]() // 这样会报错

想以字符串作为函数名称,有办法吗?
阅读 1.9k
2 个回答

指定对象就可以了,你的例子的 [fnName]() 改成这样 window[fnName]() 就可以在浏览器环境中运行。

但是想要更好的兼容性,就自己建个对象吧,像这样:

<script>

var myproject = {}

myproject.aaa = function () {
  console.log('1')
}

var fnName = 'aaa'

myproject[fnName]() 

</script>

方括号就是要字符串,但这是不能省略调用对象的,你定义的函数在浏览器中是在 window 对象下的,所以应该 window[fnName]() 这样调用

上面回答很仔细了,在没有 window 对象的情况下,定义对象是最稳妥的。
想删了答案,结果要扣分,那算了,我贴一篇文章吧,也算没白回答,更具有普适性的方式(支持字符串点操作,对字符串错误更为友好,不过有时 undefined 不如直接报错):
How to execute a function from its string name (execute function by name) in JavaScript | Our Code World

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题