如何通过数组中的字符串元素匹配函数名并调用函数?
解决方案
你遇到的报错是因为classesArr[1]是字符串"two",并非函数本身,直接执行()自然会提示“不是函数”。下面提供两种可行的实现方式:
方法一:利用全局对象调用(适合简单场景)
全局声明的函数会被挂载到window对象下,你可以通过字符串作为属性名来获取对应的函数并调用:
修改后的JavaScript代码:
$(document).on('click', 'a', function() { var classes = $(this).attr('class'); var classesArr = classes.split(' '); // 检查函数存在后再调用,避免报错 if (typeof window[classesArr[1]] === 'function') { window[classesArr[1]](); } }); function two() { console.log('hello'); }
方法二:维护函数映射表(推荐,更安全可控)
如果不想依赖全局对象,或者需要更清晰的函数管理,可以自己创建一个对象来存储函数与对应字符串的映射关系:
// 自定义函数映射表,将字符串与对应函数绑定 const funcMap = { one: function() { console.log('one called'); }, two: function() { console.log('hello'); }, three: function() { console.log('three called'); } }; $(document).on('click', 'a', function() { var classes = $(this).attr('class'); var classesArr = classes.split(' '); // 检查映射表中存在该函数后调用 if (typeof funcMap[classesArr[1]] === 'function') { funcMap[classesArr[1]](); } });
注意事项
- 必须添加函数存在性检查,避免因字符串对应的函数不存在而抛出错误
- 如果是在ES模块化环境中,全局函数不会挂载到
window,此时方法二是唯一可行的方案
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

