私は最近、Node.js とブラウザー内で JSON を解析して Javascript を渡す作業をかなり行っていて、この難問にぶつかりました。
コンストラクターを使用して作成したオブジェクトは、コンストラクター内のすべての値を個別に初期化しない限り、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 == { "initializedValue" : "私が見えます!" }
私は期待します:
a_string == { "initializedValue" : "私が見える!", "uninitializedValue" : "私が見えない!" }
更新 (01-10-2019):
最後に、@ ncardeli の回答に気付きました。これにより、上記の要件を達成するために次のようなことが可能になります (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)