Я знаю, что есть несколько вопросов о допустимых именах идентификаторов, именах свойств, зарезервированных словах и т. д., Но в ответах есть некоторые вариации (и много многословия). Я просто хотел бы знать ответ для очень конкретного случая.
Причина, по которой вы хотите использовать имя eval, заключается в том, что оно предназначено для модуля узла, который фактически оценивает код (на другом языке), поэтому это имя кажется наиболее подходящим.
Итак, мой вопрос:
Я могу это сделать?
function Foo() { ... }
Foo.prototype.eval = function(args) { ... }
Или в ES6 это?
class Foo {
...
eval(args) { ... }
}
И каковы были бы недостатки, если предположить, что это технически обосновано?
eval - это не ключевое слово; вы можете вызывать свои собственные методы как хотите.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


eval не является зарезервированное слово. Это просто свойство на window или другом globalThis (например, global на узле). Нет причин, по которым не может быть свойства с тем же именем в объекте разные (прототип Foo).
Все они действительны, и все они создают свойство с ключом 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.
Я также нашел этот список зарезервированных слов, что немного запутало. Но я предполагаю, что в этом списке больше контекста объекта браузера / окна ..?
@Gutte Ах да, старый добрый W3Schools! Я бы не стал доверять этому сайту ...
Это действительно так, eval - это свойство глобального объекта (window в браузерах или global в node.js)
Как недостаток, главный, который я вижу, это то, что удивление разработчика видит какой-то eval, немного пугаясь / смешивая его с всемирно известным eval.
Кроме того, вы можете это сделать.
В ECMAScript Предложение области есть метод под названием evaluate. Может быть, это тоже следует так называть. Или, если он действительно оценивает другой язык, почему бы не назвать его evaluateBefunge или каким-либо другим языком, который оценивается? Всего несколько идей.
Pac0 и @Xufox благодарим за ответы и комментарии. Я думаю, что выберу Assess и eval в качестве псевдонима. Остается одно раздражение: мой редактор все время выделяет слово eval ...
@Gutte О да ... консоль Firefox на самом деле правильно выделяет это; в этом контексте он распознает eval как имя свойства.
Функция
eval- это простоwindow.eval. Это просто собственность. Нет никакого конфликта.