You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过数组中的字符串元素匹配函数名并调用函数?

解决方案

你遇到的报错是因为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:20:34