Я хочу реализовать функциональность, позволяющую пользователю вводить выражение, тогда выражение будет оцениваться в определенном контексте.
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
Я пробовал с оператором и новым Функция (). Но возникли некоторые проблемы.
- expr3 "in" - это сохраненное слово javascript, оно выдаст ошибку во время выполнения.
- машинопись выведет ошибку "с оператором ".
- с оператором, похоже, имеет проблему с производительностью.
И я знаю, что могу предоставить контекст при запуске функции с помощью fn.call (ctx), но я хочу, чтобы выражение для будь как можно проще. Я не пользуюсь для ввода "ctx.in" , "ctx.out", "this.in", "this.out".
Так что я думаю, что лучший способ - это преобразовать выражение с помощью функции , это будет предшествовать "ctx." справа идентификаторы в выражении.
как "date.substr (in, out)" => "ctx.date.substr (ctx.in, ctx.out)"
но как я могу найти местоположение идентификатора?