Перепишите с (этим) утверждением - PullRequest
0 голосов
/ 20 октября 2018
new Function(`with(this) { return ${$eval}}`).call({
        moment,
        ...context
});

Почему я не могу использовать

  const that = this;
  const ret = new Function(`with(${that}) { return ${$eval}}`).call({
    moment,
    ...context
  });

):

Я что-то не так делаю?Мне нужно сделать это, чтобы переместить код.

Также, если бы я мог переписать это без этого, было бы здорово, но не уверен, как!Я не уверен, что он берет из цепочки контекста, так как я не писал код, но он довольно запутанный.

1 Ответ

0 голосов
/ 20 октября 2018

Тело функции, которое вы передаете new Function, это просто строка.Вместо того, чтобы пытаться интерполировать значения в строку (что в общем случае невозможно), вы должны объявить соответствующие параметры и передать их созданной функции:

const ret = new Function('that', `with (that) { return ${$eval} }`)({
  moment,
  ...context
});

new Function('that', `with (that) { return ${$eval} }`) представляет функцию

(function (that) {
    with (that) {
        return /* … code from $eval … */
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...