繁体   English   中英

在 node.js 中访问动态 function 名称

[英]Access dynamic function name in node.js

我有一个导出 function myFunction的 js 文件。 然后,我在导出模块之外定义了另一个 function。 如何通过名称动态访问它?

我正在尝试这种方式,但它不起作用:

exports.myFunction = () => {
    let functionName = 'helperFunction';
    global[functionName]();
}

const helperFunction = () => {
    console.log('helperFunction invoked');
}

我正在尝试使用全局 scope global[functionName](); ,但不起作用。 助手function的scope是什么?

helperFunction之所以在export之外,是因为我在同一个文件中导出了多个调用helperFunction的函数。

TLDR:使用eval

你好呀,

我告诉你一件关于吊装的事情,然后回答你的问题。

现在您已经在导出后定义了helperFunction ,它可能会因为称为提升的 JS 行为而导致问题。 myFunction中识别了helperFunction的声明,但在初始化时不识别。 这会给你以下错误:

ReferenceError: Cannot access 'helperFunction' before initialization

因此,只需将helperFunction移至文件顶部即可。

现在,到实际的答案。 您可能已经意识到您的helperFunction实际上在 scope 中,您可以调用它。 为此,您需要评估字符串: helperFunction() 您可以使用以下代码段:

console.log('hi');
let functionName = 'helperFunction';
eval(`${functionName}()`);
console.log('bye');

奖励:您实际上对代码所做的是创建一个包含一个字符串元素的数组并调用该数组。 当然,这会引发以下错误:

TypeError: [functionName] is not a function

从理论上讲,您可以使其与全局一起使用。

global.helperFunction = () => {
    console.log('helperFunction invoked');
}

const myFunction = () => {
    let functionName = 'helperFunction';
    global[functionName]();
}

是否是一个好主意……嗯,这是一个完全不同的讨论。 我不知道任何细节,但在这些情况下,使用类通常是 go 的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM