评估模板字符串和类实例

时间:2019-06-06 11:45:30

标签: javascript arraylist instance eval nodelist

在代码重构过程中,使用了eval()来解析模板字符串并实例化一个类。正在运行的代码链接到下面。

 eval(`let ${tempid} = new Accordian(${"[j]"})`)

为什么这个字符串似乎需要在[j]引用的对象周围加上引号才能起作用?

我的另一个问题与类实例有关,以及它们是否已创建?

因此,变量tempid应该是从nodeList提取的字符串,但是我得到的错误似乎暗示了其他方面,尽管事实证明代码运行了,除非我认为实际上已经为从标记中提取为唯一的每个风琴对象实例化了一个新类。

是否创建了两个新的类实例?

我遇到以下错误:

 'Accordian' is defined but never used. (no-unused-vars) eslint

 'use strict' is unnecessary inside of modules. (strict) eslint

 eval can be harmful. (no-eval) eslint

https://codesandbox.io/embed/eager-morning-9s5ti?fontsize=14

Edit eager-morning-9s5ti

1 个答案:

答案 0 :(得分:2)

为什么要引用?

"[j]"${ }插入到模板字符串中的字符串。据我所知,整个${"[j]"}部分可以替换为[j]

“从未使用Accordian”

您的linter不知道eval在运行时会做什么。由于您仅在字符串中使用Accordian,因此在您的代码中实际上并未使用它。

“评估可能有害”

eval是邪恶的。根据插入的tempid的值,所评估的字符串可以包含任意(潜在有害)代码。您可能想使用tempid来设置某个对象的属性,例如global[tempid] = new Accordian([j])。这也可以使短毛猫也能看到班级的用法。