2014-01-02 3 views
0

Итак, для начала я создаю массив функций с использованием некоторого теста (например: «alert (« Hello »)») и преобразует этот текст в анонимную функцию, используя функцию (текст) метод. напримерХранить массив функций JS JSON

someArray[0] = Function('alert("Hello")'); 

Затем я могу запустить эту функцию следующим образом:

someArray[0](); 

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

Мой вопрос заключается в том, как сохранить массив функций, чтобы я мог их загрузить и запустить позже?

+0

Почему вы преобразование строк в функцию? Откуда берутся эти строки? Можете ли вы сохранить эти строки в своем объекте в локальном хранилище, а затем снова вызвать «новую функцию», когда вы их вернете? Я бы предположил, что, выполняя именованные функции и просто сохраняя свое имя в вашем объекте. –

+0

В соответствии с ответами на [аналогичный вопрос StackOverflow] [1] JSON не может хранить функции. [1]: http://stackoverflow.com/questions/8328119/can-i-store-regexp-and-function-in-json –

+0

Это, как правило, плохая идея, и может сделать дыры в безопасности , – SLaks

ответ

2

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

+0

Cheers, надеялся избежать этого метода, но о хорошо :) – Samishalt

+0

Ха-ха, простите, что я не могу помочь вам дальше, но если вы не перепишете библиотеку. Это будет невозможно xP – user3152069

0

Вы можете base64 кодировать функцию как строку. Сохраните его в json-файле. Загрузите json-файл в свою страницу/приложение. base64 декодировать.

Затем eval() зарегистрирует вашу новую функцию.

//load json data from file 
var jsonData = {}; 

//Create string representation of function 
var s = "function " + atob(jsonData.func); 

//"Register" the function 
eval(s); 

//Call the function 
//'test' is the name of the function in jsonData.func 
test(); 

ИЛИ

//load json data from file 
var jsonData = {}; 

//create function from base64 decode 
var fn = Function(atob(jsonData.func)); 

//test 
fn(); 

** Конечно функция должны быть отформатированы по-разному для каждого из этих примеров.

Is there a way to create a function from a string with javascript?

+0

Использование 'eval()' представляет угрозу безопасности, если вы не можете доверять файлу JSON. – Jubobs

Смежные вопросы