JSON.stringify
を使用してオブジェクトを保存し、後で再度ロードすることを考えています。もちろん、「文字列化」はうまく機能しますが、オブジェクトのプロトタイプ/クラスをどのように設定するかはわかりません。
質問する
134 次
1 に答える
1
.toJSON
これを実現するには、コールバックを使用して復活させることができます。
スキームは次のとおりです。
function Person() {
this.name = "name";
this.age = "age";
}
Person.prototype.toJSON = function() {
//Define this for other classes as well
return {__class__: "Person", name: this.name, age: this.age};
};
function reviver( key, value ) {
if( typeof value == "object" && value.__class__ ) {
var ret = new window[value.__class__];
for( var k in value ) {
if( k === "__class__" ) continue;
ret[k] = value[k];
}
return ret;
}
return value;
}
var a = new Person(),
b = new Person();
var json = JSON.stringify( [a,b] );
var decoded = JSON.parse( json, reviver);
console.log( decoded ); //[Person, Person] I.E. array of Person instances instead of plain objects
この簡略化されたスキームでは、クラスはグローバルでなければなりません。
于 2013-01-11T21:31:34.147 に答える