2015-01-12 62 views
0

在Javascript中,我正在使用localStorage。因爲它不可能放入物體,所以我以前是JSON.stringifyJavascript:反序列化對象和混合方法

我正在存儲整個遊戲狀態,並且一些子對象有一些方法。

當使用JSON.parse讀取它們時,方法消失 - 這是非常有意義的。將愚蠢的方式存儲在瀏覽器中的對象。

將方法「重新附加」到之前已有的對象的最佳方式是什麼,以便對象可以像以前一樣進行操作?

這是個好辦法,只是做

savedObj.prototype = MyClass.prototype; 

我缺少的東西?

+0

這要看情況。如果任何對象具有任何特定於實例的功能,那麼僅恢復原型是不夠的。而且,只有設置一個原型才能建立適當的繼承,所以'instanceof'不會起作用。所以你需要'savedObj .__ proto__ = MyClass.prototype;'另外 – zerkms

+0

你錯過了原始對象的例子。 – Xotic750

+0

將相關信息存儲在鍵,值和方法中,如果它們存在 – Rafael

回答

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