Учитывая, что у меня есть класс, определенный как, напримерКак получить экземпляр класса из строки JSON?
(function() {
function Dummy(){
var toReturn ={
myProp : "asdf",
myFunc : myFunc
}
return toReturn;
function myFunc(){};
}
})();
как можно получить экземпляр одного и того же типа после
var dummy = new Dummy();
JSON.stringify(dummy);
, так что у меня есть MyFunc все еще доступны на типе.
JSON.parse(JSON.stringify(dummy))
возвращает ту же форму объекта не одного типа.
ПРИМЕЧАНИЕ: Я не спрашиваю о возможности JSON, но как люди справляются с этим в целом. Вы вручную катите свой механизм отображения, чтобы после разбора JSON вы отображали его на экземпляр типа или если в какой-либо библиотеке есть такие функции, например, подчеркивание.
Я создал вспомогательную функцию, которая помогает мне сделать это, но хотелось бы услышать от других, как вы справляетесь с ситуацией подобным образом. Когда я добавляю комментарии, JSON приходит через провод, для которого у нас есть определенный тип. Чтобы получить значения из JSON в нашем типе, мы анализируем json, создаем экземпляр типа и затем применяем функцию карты ниже.
function map(fromObj, toObj) {
Object.keys(fromObj)
.forEach(function (key) {
if (typeof fromObj[key] != 'function') {
if (toObj.hasOwnProperty(key)) {
if (typeof fromObj[key] !== 'object') {
toObj[key] = fromObj[key];
} else {
map(fromObj[key], toObj[key]);
}
}
}
}
});
}
JSON не могут представлять функции JavaScript, поэтому 'myFunc' свойство не может быть сериализованы таким образом, что приведет к тому, что он снова станет функцией при анализе. – cdhowie
@cdhowie Я бы сказал, что JSON * может * представлять функции JavaScript (как строки, представляющие источник, с оговорками об области), но что такое преобразование не является стандартным или не поддерживается методами JSON. *. – user2864740
@cdhowie: Я знаю, что мой вопрос был не в том, как это сделать с JSON, но как это сделать в целом. – epitka