Использование eval в качестве имени метода-прототипа в JavaScript или NodeJS - PullRequest
0 голосов
/ 17 января 2019

Я знаю, что есть несколько вопросов о допустимых именах идентификаторов, именах свойств, зарезервированных словах и т. Д., Но в ответах есть некоторые вариации (и много подробностей). Я просто хотел бы знать ответ для очень конкретного случая.

Причина, по которой вы хотите использовать имя eval, заключается в том, что он предназначен для модуля узла, который будет фактически оценивать код (на другом языке), поэтому он выглядит как наиболее подходящее имя.

Итак, мой вопрос:

Могу ли я это сделать?

function Foo() { ... }

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

Или в ES6 это?

class Foo {
  ...

  eval(args) { ... }
}

А какие будут недостатки, если это технически допустимо?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Это действительно, eval - это свойство глобального объекта (window в браузерах или global в node.js)

В качестве недостатка основным, который я вижу, будет удивление разработчика , увидевшего eval, немного испуганного / смешавшего его с всемирно известным eval.

Кроме того, вы можете сделать это.

0 голосов
/ 17 января 2019

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...