1

JSON.stringifyを使用してオブジェクトを保存し、後で再度ロードすることを考えています。もちろん、「文字列化」はうまく機能しますが、オブジェクトのプロトタイプ/クラスをどのように設定するかはわかりません。

4

1 に答える 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 に答える