Запустить функцию Javascript, хранящуюся в строковой переменной

У меня есть следующая функция, исходящая из вызова ajax, которая хранится в строковой переменной.

obj.action = "DisplayActivity('modalDisplay', 0, 4);"

Я пытаюсь запустить его, но безуспешно. Я пробовал:

eval(obj.action);

и с:

окно [obj.action]

Любые идеи? Спасибо.

Чтобы eval работал, нужно где-то определять DisplayActivity.

ibrahim mahrir 16.01.2019 00:47

DisplayActivity действительно существует? В противном случае в консоли могут возникать ошибки.

Jack Bashford 16.01.2019 00:48
jsfiddle.net/Lov981gy работает нормально.
Taplar 16.01.2019 00:48
eval работает, конечно, только если функция, которую вы пытаетесь вызвать, находится в области видимости. window[obj.action] не имеет смысла.
Felix Kling 16.01.2019 00:49

да точно. функция уже определена. Я могу запустить его, просто вызвав DisplayActivity ('modalDisplay', 0, 4); в том же разделе кода. но мне нужно вызвать его из переменной, потому что он исходит со стороны сервера.

D.B 16.01.2019 00:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
52
2

Ответы 2

Попробуйте использовать Новая функция:

let s = "console.info('Hello '+a)",
call = new Function('a', s)

call('world!')

Обязательно избегайте вызова материалов из GET / POST, иначе это приведет к типичный xss, позволяющему изменить ваш DOM с помощью специальной созданной ссылки.

Полагаю, это проблема масштабирования.

Пытаться:

eval("global.tmp = function(DisplayActivity){" + obj.action + "};");
global.tmp(DisplayActivity);

Другие вопросы по теме