簡體   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