JavaScript中如何将动态函数名传递给typeof检测函数是否存在
你现在的写法检测的是functionName这个变量本身的类型,它本身存的就是字符串,自然返回string。要检测和该字符串值同名的函数是否存在,可以按下面的方法实现:
方法1:检测全局作用域下的函数
如果你的函数是定义在全局作用域的,直接从全局对象上取对应名称的属性再检测类型即可:
function callback_user_login(object, status) { handle_simple_message(object); } var functionName = "callback_user_login"; // 兼容浏览器和Node.js环境获取全局对象 const globalContext = typeof window !== 'undefined' ? window : global; console.log(typeof globalContext[functionName] === 'function'); // 输出true
方法2:非全局作用域下的推荐写法
如果函数是定义在局部/模块作用域下,不推荐强行访问作用域取值,更稳妥的做法是把所有要动态检测的函数统一放到一个映射对象中管理:
// 统一管理所有回调函数 const callbackMap = { callback_user_login(object, status) { handle_simple_message(object); }, // 其他回调函数都可以放到这里 }; var functionName = "callback_user_login"; console.log(typeof callbackMap[functionName] === 'function'); // 输出true
这种方法不会污染全局作用域,也能避免作用域变化导致的检测失效问题。
内容的提问来源于stack exchange,提问作者user2398907
相关产品推荐
相关产品推荐

