我知道关于有效的标识符名称,属性名称,保留字等有几个问题,但是答案中有一些变化(以及很多冗长)。我只想知道一个非常具体情况的答案。
要使用名称eval
的原因是,这是用于实际上将评估代码(使用另一种语言)的节点模块,因此感觉像是最合适的名称。
所以我的问题是:
我可以这样做吗?
function Foo() { ... }
Foo.prototype.eval = function(args) { ... }
还是在ES6中?
class Foo {
...
eval(args) { ... }
}
假设这在技术上是有效的,那么缺点是什么?
答案 0 :(得分:2)
eval
不是reserved word。它仅仅是window
上的一个属性,或者是globalThis
上的任何属性(例如,Node上的global
)。没有理由为什么不同对象(Foo
的原型)上没有相同名称的属性。
所有这些都是有效的,并且所有这些都在 some 对象上使用键eval
创建了一个属性:
function Foo(){}
Foo.prototype.eval = function(){};
new Foo().eval();
class Foo{
eval(){}
}
new Foo().eval();
({
eval: function(){}
}).eval();
更进一步,即使eval
是保留字,所有这些仍然有效。这是正确的,因为方法实际上可以具有任何名称:
class Foo{
if(){}
}
new Foo().if();
({
if(){},
var(){},
for(){},
switch(){}
}).var();
如果它们是保留字,则不能单独使用它们,例如const if = new Foo().if;
或const {if} = new Foo();
。 eval
在这里很好;只会覆盖window.eval
。
答案 1 :(得分:0)
这是有效的,eval
是全局对象的属性(浏览器中为window
或node.js中为global
)
作为缺点,我主要看到的是开发人员的惊讶,他们看到了一些eval
,有点害怕/将其与全球知名的{{1 }}。
除此之外,您还可以做到。