【问题标题】:How can I access a function in a JavaScript Array only with a String?如何仅使用字符串访问 JavaScript 数组中的函数?
【发布时间】:2023-04-08 08:31:01
【问题描述】:

所以,我目前正在尝试进入模拟器编程,我选择了 JavaScript,因为它是我完全流利的语言。

基本上我的问题归结为: 我有一个数组,它是我的操作码表,因此它将我的函数绑定到一个数字。

E. g.:

function function_one() {
  alert("hello");
}

function function_two() {
  alert("World")
}

var optable = [
        function_one,
        function_two
];

optable[0](); //runs function_one()
optable[1](); //runs function_two();

现在,我想编写一个简单而原始的编译器,它包含汇编代码行的一部分,搜索该数组中的第一个字符串并返回可选函数中的函数索引,但我尝试的所有操作都只返回 @987654322 @。 currentLine[] 编码如下: ["function_one", "foo", "bar"] (作为字符串,是的)

例如:

var currentLine = byLine[i].split(" ");
        console.log(currentLine[0]);
        currentProgram += optable.findIndex(currentLine[0]); //<-- NaN
        console.log(currentProgram);

我知道这不是它的工作原理,因为 optable 数组包含函数并且我搜索一个字符串,但是我怎样才能让它工作呢?我有一些可以使用 eval() 的东西,但我已经可以看到这可能会导致什么......(安全等)

【问题讨论】:

  • 在您的第 0 个索引上,它是函数关键字,而不是函数的名称。函数名称在索引 1 处(拆分后)
  • 哦,等等,这部分可能不够清楚,将编辑它。

标签: javascript arrays function


【解决方案1】:

您可以使用object[propertyName] 表示法:

const optable = {
  function_one : ()=>console.log("Hello"),
  function_two : ()=>console.log("world!"),
};

stringContainingAFunctionName = "function_one";
optable[stringContainingAFunctionName]();

【讨论】:

  • 我想这可能是最好的使用属性。谢谢!顺便说一句,因此有效
【解决方案2】:

您可以使用Eval() 函数来评估以字符串形式表示的 JavaScript 代码,但不建议在生产环境中使用

例如eval(optable[0]())

【讨论】:

  • 永远不要使用eval,不推荐。
  • evalevil
  • 我已经试过了,但问题是如果有人走私一个名为 length 或 proto 的 Opcodeliteral,它会返回错误的结果
猜你喜欢
  • 1970-01-01
  • 2021-03-31
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
相关资源
最近更新 更多