Как преобразовать строку в объект Javascript со свойством и ссылкой на функцию? - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы создать объект Javascript, который содержит свойство (пример onClick) функции типа (пример myClickHandler), например:

var options = {onClick: this.myClickHandler};

Я хочу, чтобы объект выше был создан из строки, потому чтоОбъект параметров может отличаться при каждом запуске приложения, и я хочу, чтобы он оценивался во время выполнения.(myClickHandler является существующей функцией).Я хочу, чтобы объект параметров создавался из строки, потому что свойство onClick может быть чем-то другим, а его функция может быть чем-то другим.Они определяются из строки, которая является динамической.

Ищите что-то вроде этого:

var optionsString = "{onClick: this.myClickHandler}";  
var options = JSON.parse(optionsString); //won't work. For illustration only.

Это не будет работать естественным образом.В идеале я хочу преобразовать строку за один раз, но мне, возможно, придется ее проанализировать, но optionString может содержать одно или несколько свойств.

Ответы [ 2 ]

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

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

let context = {};

context.myclickhandler = () => {
	console.log("### It clix ####")
}

let nameOfFunction = "myclickhandler"
let obj = {"onClick" : context[nameOfFunction]};
obj["onClick"]();

В данном примере контекст является просто объектом, но он также может быть объектом Windows или экземпляром функции конструктора.

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

Попробуйте использовать eval как:

var myClickHandler = function(){ alert('i am evil'); };
var options = JSON.parse('{ "onClick": "this.myClickHandler" }');

// вызывая обработчик сейчас

eval(options.onClick)();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...