如何根据传入参数动态调用对应函数?loadFnc非函数报错怎么解决
问题原因
loadFncName函数返回的是字符串格式的函数名称,而非可执行的函数引用,你直接对字符串执行调用操作,就会触发loadFnc is not a function的类型错误。
如果之前类似的写法可以正常运行,说明此前你的映射逻辑是直接返回函数本体,或者多了一步从字符串到对应函数的转换步骤,当前代码缺少该环节。
修复方案
有两种常用的修复方式,可根据你的实际代码场景选择:
- 修改
loadFncName内的映射逻辑,直接存储函数引用而非字符串
function loadFncName(scheduleValue){ var navigation = { "01" : upComingAlt, // 直接写函数名,不需要加引号 "001" : upComingE3D, custom : customWeek } return navigation[scheduleValue]; }
- 如果你的函数是挂载在全局作用域下的,也可以在拿到函数名字符串后,从全局对象中取对应的函数引用
// 把原来的 var loadFnc = loadFncName(scheduleValue); 替换为下面这行 var loadFnc = window[loadFncName(scheduleValue)];
内容的提问来源于stack exchange,提问作者Navneet
相关产品推荐
相关产品推荐

