javascript eval-выражение в контексте без использования 'with' - PullRequest
0 голосов
/ 07 января 2020

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

const ctx = {
  date: '2020-10-10T20:00:00',
  name: 'router',
  in: 30,
  out: 80
}

время выполнения

// use input exprs at runtime.
"date.substr(0, 10)";
// '2020-10-10'
"name + 123";
// router123
"out - in";
// 50

Я пробовал с оператором и новым Функция (). Но возникли некоторые проблемы.

  1. expr3 "in" - это сохраненное слово javascript, оно выдаст ошибку во время выполнения.
  2. машинопись выведет ошибку "с оператором ".
  3. с оператором, похоже, имеет проблему с производительностью.

И я знаю, что могу предоставить контекст при запуске функции с помощью fn.call (ctx), но я хочу, чтобы выражение для будь как можно проще. Я не пользуюсь для ввода "ctx.in" , "ctx.out", "this.in", "this.out".

Так что я думаю, что лучший способ - это преобразовать выражение с помощью функции , это будет предшествовать "ctx." справа идентификаторы в выражении.

как "date.substr (in, out)" => "ctx.date.substr (ctx.in, ctx.out)"

но как я могу найти местоположение идентификатора?

...