Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сериализация объекта с функциями. (https://javascript.ru/forum/misc/66836-serializaciya-obekta-s-funkciyami.html)

Dilettante_Pro 13.01.2017 15:07

who_cares_?,
Цитата:

Сообщение от who_cares_?
как перевести содержимое функции в текст?

Как вариант для JS-объекта... Правда, toJson тоже туда лезет.
var room = {
  number: 23,
  occupy: function() { alert( this.number ); },
  free: function() { alert( this.number ); }
};

room.toJSON = function()
 { 
    var replacement = new Object();

    for (var val in this)
    {  if(this[val].name == '')  { replacement[val] = ""; }
        else {
           if (typeof (this[val]) === 'function')
               replacement[val] =  this[val].toString();
           else
               replacement[val] = this[val]
       }
    }
    return replacement;
};

alert(JSON.stringify(room));

who_cares_? 13.01.2017 15:50

Dilettante_Pro Ну да выглядит неплохо, только опять таки, как вернуть объект в первозданный вид? Придется опять проходить по всему полученному с помощью JSON.parse объекту чем то типа eval, которым по хорошему вообще лучше не пользоваться.. неужели нет какого-то более .. эммм .. готового решения/библиотеки ?((

TestUser013 13.01.2017 16:49

who_cares_?,
Никто такими извращениями не занимается....

Alexandroppolus 14.01.2017 18:54

В общем случае функции сериализовать нельзя.
Во первых, функция может быть создана методом bind(), тогда она будет выглядеть примерно так: "function () { [native code] }"
Во вторых, функция при своем создании может замыкать переменные, тогда строка будет правдоподобной, но всё равно бесполезной.

Потому задача сомнительная. Надо смотреть как функции появились. Пришли с сервера? они уже строки. Были как-то созданы с замыканием? Надо отдельно сохранять замыкания.


Хотя, если функции простые и используют только this и глобалы, то сериализуй и забудь тот бред, который я тут написал =)


Часовой пояс GMT +3, время: 08:24.