如何仅通过字符串访问 JavaScript 数组中的函数?

3

我目前正试图进入模拟器编程,我选择JavaScript是因为这是我完全熟悉的语言。

基本上我的问题可以归结为:

我有一个数组,它是我的Opcode表,因此将我的函数绑定到一个数字。

例如:

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();


现在,我想编写一个简单而原始的编译器,它接受汇编代码行的一部分,在此数组中搜索第一个字符串,并返回optable中函数的索引,但我尝试的所有方法都只会返回 NaN。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处(分割后) - Sagar Agrawal
哦,等等,也许这部分不够清晰,我会编辑它。 - prismflux
2个回答

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

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

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


我想最好使用属性。谢谢!顺便说一句,这样可以工作。 - prismflux

-1
你可以使用Eval()函数来评估表示为字符串的JavaScript代码,但不建议在生产中使用。
例如:eval(optable [0]())

不应该使用 eval,不建议这样做。 - Sagar Agrawal
eval邪恶的 - jayms
我已经尝试过了,但问题在于如果有人走私了一个名为length或__proto__的Opcodeliteral,它将返回错误的结果。 - prismflux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接