JavaScript eval.call () не работает должным образом - PullRequest
0 голосов
/ 13 января 2019

В настоящее время я пытаюсь проверить строки условий нескольких объектов «настройки» в своей области видимости. Вероятно, просто быстрее показать пример структуры:

"root": {
    "Check1": {
        type: "checkbox",
        text: "test",
        value: false,
    },
    "Check2": {
        type: "checkbox",
        text: "should only show up if test is checked",
        value: false,
        condition: "Check1.value"
    }
}

Поэтому я использую цикл for для итерации ключей корневого объекта, чтобы получить дочерние объекты, а затем попробуйте «eval.call ()» условие в контексте корневого объекта, например:

for (var p in root) {
    var prop = root[p];
    if (prop.condition != null) {
        var result = function(str){
            return eval(str);
        }.call(root, prop.condition);

        // if result false, hide...
    }
}

однако при обработке «Check2» -элемента это всегда будет вызывать подобное исключение:

VM981:1 Uncaught ReferenceError: Check1 is not defined
at eval (eval at <anonymous> (test.js:299), <anonymous>:1:1)

Я также безуспешно пытался использовать eval.call(root, condition) и window.eval.call(root, condition).

Возможно, я что-то упустил, но я также не смог найти очень информативного материала о том, что конкретно делает функция .call() в связи с .eval().

Буду признателен за любую помощь - заранее спасибо!

...