javascript - 在 node.js 中访问动态函数名
问题描述
我有一个导出函数的 js 文件myFunction
。然后,我在导出模块之外定义了另一个函数。如何通过名称动态访问它?
我正在尝试这种方式,但它不起作用:
exports.myFunction = () => {
let functionName = 'helperFunction';
global[functionName]();
}
const helperFunction = () => {
console.log('helperFunction invoked');
}
我正在尝试使用全局范围global[functionName]();
,但不起作用。辅助函数的范围是什么?
helperFunction之所以在export之外,是因为我在同一个文件中导出了多个调用helperFunction的函数。
解决方案
TLDR:使用eval。
你好呀,
我告诉你一件关于吊装的事情,然后回答你的问题。
现在您已经在导出后定义了helperFunction,它可能会因为称为提升的 JS 行为而导致问题。在myFunction中识别了helperFunction的声明,但在初始化时不识别。这会给你以下错误:
ReferenceError: Cannot access 'helperFunction' before initialization
因此,只需将helperFunction移至文件顶部即可。
现在,到实际的答案。您可能已经意识到您的helperFunction实际上在范围内,您可以调用它。为此,您需要评估字符串:helperFunction()
。您可以使用以下代码段:
console.log('hi');
let functionName = 'helperFunction';
eval(`${functionName}()`);
console.log('bye');
奖励:您实际上对代码所做的是创建一个包含一个字符串元素的数组并调用该数组。当然,这会引发以下错误:
TypeError: [functionName] is not a function
推荐阅读
- mysql - VB.net DataGridView not display the Data from MySql Data base
- python - How to use implementation inheritance?
- php - problem with routes in my menu, url is bad laravel
- javascript - HTML menu hovers content instead of pushing it down
- c++ - Improve numerical accuracy of LineLine intersection method (3D)
- python - Python threading stopping code from being executed
- c - libgit2 - c: 我怎么知道正在使用哪个版本
- c - Create partitions on a disk, and put a filesystem on them with C under linux?
- python - 当我抓取网站时,我的产出物品去哪里了?
- heroku - 当 Heroku Papertrail 日志记录达到每日 10 MB 的限制时会发生什么?