gpt4 book ai didi

javascript - 在 JavaScript 或 NodeJS 中使用 eval 作为原型(prototype)方法名

转载 作者:行者123 更新时间:2023-11-30 14:12:06 25 4
gpt4 key购买 nike

我知道有几个关于有效标识符名称、属性名称、保留字等的问题,但答案存在一些差异(并且非常冗长)。我只想知道一个非常具体的案例的答案。

想要使用名称 eval 的原因是,这是用于实际评估代码(以另一种语言)的节点模块,所以它感觉是最合适的名称。

所以我的问题是:

我可以这样做吗?

function Foo() { ... }

Foo.prototype.eval = function(args) { ... }

或者在 ES6 中,这个?

class Foo {
...

eval(args) { ... }
}

假设这在技术上是有效的,会有什么缺点?

最佳答案

eval 不是 reserved word .它只是 window 或任何 globalThis 的属性(例如 Node 上的 global)。没有理由不能在不同对象(Foo 的原型(prototype))上使用同名属性。

所有这些都是有效的,并且所有这些都在 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

关于javascript - 在 JavaScript 或 NodeJS 中使用 eval 作为原型(prototype)方法名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54233149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com