まあそれがあるだけの方法だ、JSON.stringify
がnot-のいずれかを保存しない:
4
{"someVal":50}
私はこの出力が期待されます所有しているオブジェクトのプロパティです。他の欠点と考えられる回避策についての興味深い議論を見ることができますhere。
また、著者は問題を文書化しただけでなく、HydrateJSというライブラリを作成しました。
問題は、最初の視点よりも少し深いです。 a
が実際に{"position":0, "someVal":50}
にストリングされたとしても、後で解析すると、目的のプロパティを持つオブジェクトが作成されますが、Actorのインスタンスでもなく、WorldObjectへのプロトタイプリンクもありません(結局のところ、この情報を持っているので、それを復元することはできません)。
プロトタイプチェーンを保存するには、HydrateJSで使用されているような巧妙なトリックが必要です。これがあなたが目指しているものでない場合は、オブジェクトを文字列化する前にオブジェクトを「平坦化」する必要があるかもしれません。これを行うには、たとえば次のようにします。オブジェクトが所有しているかどうかにかかわらず、オブジェクトのすべてのプロパティを反復し、それらを再割り当てします(プロトタイプから継承されたものではなくオブジェクト自体に確実に定義されます)。
function flatten(obj) {
var result = Object.create(obj);
for(var key in result) {
result[key] = result[key];
}
return result;
}
元のオブジェクトを変更する方法はありません。だから、あなたが欲しいの出力を得るでしょうし、a
は同じままになります
console.log(JSON.stringify(flatten(a)));
を使用。
私はこのコードは基本的に私が必要と思うものだと思います。私はこのシリアル化されたバージョンを保存し、単純なローダーを書くことができるはずです。よくやった! – wtjones