Я недавно работал с большим количеством разборов JSON и передачей Javascript в Node.js и браузерах и столкнулся с этой загадкой.
Любые объекты, которые я создал с помощью конструктора, не могут быть полностью полностью сериализованы через JSON.stringify, ЕСЛИ Я не инициализировал все значения внутри конструктора индивидуально! Это означает, что мой прототип становится практически бесполезным при разработке этих классов.
Может кто-нибудь пролить свет на то, почему следующее не сериализуется, как я ожидаю?
var ClassA = function () { this.initialisedValue = "You can see me!" };
ClassA.prototype = { initialisedValue : "You can't see me!", uninitialisedValue : "You can't see me!" };
var a = new ClassA();
var a_string = JSON.stringify(a);
Что происходит:
a_string == {"initialisedValue": "Вы меня видите!" }
Я ожидаю:
a_string == {"initialisedValue": "Вы можете видеть меня!", "uninitialisedValue": "Вы не можете видеть меня!" }
Обновление (01-10-2019):
Наконец заметил @ncardeli Answer, который позволяет нам сделать что-то вроде следующего, чтобы выполнить мои требования (в 2019 году!):
замещать
var a_string = JSON.stringify(a);
с участием
var a_string = JSON.stringify(a, Object.keys(ClassA.prototype));
Полный код:
var ClassA = function () { this.initialisedValue = "You can see me!" };
ClassA.prototype = { initialisedValue : "You can't see me!", uninitialisedValue : "You can't see me!" };
var a = new ClassA();
var a_string = JSON.stringify(a, Object.keys(ClassA.prototype));
console.log(a_string)