Javascript:反序列化对象和混合方法

时间:2015-01-12 22:42:01

标签: javascript json serialization

在Javascript中,我目前正在使用localStorage。因为不可能放入物体,所以我JSON.stringify之前就是它们。

我正在存储整个游戏状态,而且一些子对象有方法。

使用JSON.parse读取它们时,方法已经消失 - 这绝对有意义。将对象(包括浏览器中的方法)存储起来是愚蠢的。

将方法“重新附加”到之前的对象的最佳方法是什么,以便对象的行为方式与以前相同?

这是一个好方法吗

savedObj.prototype = MyClass.prototype;

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

也许你想做这样的事情?

的Javascript

function MyClass(state) {
    if (typeof state === 'string') {
        this.state = JSON.parse(state);
    } else {
        this.state = {};
    }

    this.appendChild = function (element) {
        element.appendChild(document.createTextNode(this.toJSON()));
    }
}

MyClass.prototype = {
    log: function () {
        console.log(this.toJSON());

        return this;
    },
    set: function (key, value) {
        this.state[key] = value;

        return this;
    },
    toJSON: function () {
        return JSON.stringify(this.state);
    }
};

var myClass1 = new MyClass();

myClass1.set('somekey', true);
myClass1.log();

localStorage.mySave = myClass1.toJSON();

var myClass2 = new MyClass(localStorage.mySave);

myClass2.log();
myClass2.appendChild(document.body);

jsFiddle