Javascript 评估模板字符串和类实例
在代码重构过程中,eval()被投入服务来解析模板字符串并实例化一个类。正在运行的代码链接到下面Javascript 评估模板字符串和类实例,javascript,arraylist,instance,eval,nodelist,Javascript,Arraylist,Instance,Eval,Nodelist,在代码重构过程中,eval()被投入服务来解析模板字符串并实例化一个类。正在运行的代码链接到下面 eval(`let ${tempid} = new Accordian(${"[j]"})`) 为什么这个字符串似乎需要在[j]引用的对象周围加引号才能工作 我的另一个问题与类实例有关,以及它们是否已创建 因此,变量tempid应该是从节点列表中提取的字符串,但我得到的错误似乎表明了另一种情况,尽管代码运行,但在我看来,除非它为从标记中提取为唯一的每个accordian对象实例化了一个新类,否则
eval(`let ${tempid} = new Accordian(${"[j]"})`)
为什么这个字符串似乎需要在[j]引用的对象周围加引号才能工作
我的另一个问题与类实例有关,以及它们是否已创建
因此,变量tempid应该是从节点列表中提取的字符串,但我得到的错误似乎表明了另一种情况,尽管代码运行,但在我看来,除非它为从标记中提取为唯一的每个accordian对象实例化了一个新类,否则它不会这样做
是否创建了两个新的类实例
我得到以下错误:
'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
为什么要引用?
“[j]”
是通过${
}
插入模板字符串的字符串。据我所知,整个${“[j]”}
部分可以用[j]
替换
“手风琴从未使用过”
您的linter不知道eval
在运行时会做什么。由于您只在字符串中使用了Accordian
,因此它实际上没有在代码中使用
“评估可能有害”
eval
是邪恶的。根据插入的tempid
的值,经过计算的字符串可能包含任意(可能有害)代码。您可能想使用tempid
在某些对象上设置属性,例如global[tempid]=new Accordian([j])
。这也会让linter看到类的用法。我觉得你的评论非常有用,从中可以看到一个包含tempid的对象替换了数组,从而可以摆脱eval altogehter,但是,使用提取的字符串作为变量名(与accordian ID相同)实例化新类的问题仍然存在,据我所能确定。谢谢你的关注。不,你的评论,所有的,继续。我在这个实例中的作用域问题上遇到了麻烦,因此最终能够通过登录到IFFE中进行调用的控制台来“查看”我的实例。它不一定是一个对象,但是类实例的集合更容易在REPL中以这种方式看到。