2014-02-11 70 views
0

我無法弄清楚如何存儲包含方法的對象。如果我在庫存使用 localStorage.setItem('inventory', JSON.stringify(hero.inventory));使用localStorage保存方法

和一些物品(對象)有方法,我只跟01​​hero.inventory = JSON.parse(localStorage.getItem('inventory'));

你怎麼可以存儲獲得性能和沒有得到恢復與它的所有屬性的對象和方法循環錯誤?

+0

你應該只存儲值而不是方法。 – rafaelcastrocouto

回答

0

簡答題:你不行。

較長的答案: 您只能在localStorage內存儲字符串。這就是爲什麼你首先使用JSON.stringify()JSON.parse()

請參閱How to serialize & deserialize Javascript objects?規避此方法。

或者你的對象可以包含一個構造函數/方法,如果給定的所有非方法屬性都將使用所有方法重建完整對象。

非常簡單的例子:

function Countdown(start) { 
    this.start = start; 
    this.ticksCounted = 0; 
} 

Countdown.prototype.tick = function(){ 
    this.start -= 1; 
    this.ticksCounted += 1; 
} 

Countdown.parse = function(param) { 
    // get a basic object 
    var result = new Countdown(); 

    // append all values 
    for(var key in param) { 
    if(param.hasOwnProperty(key)) { 
     result[ key ] = param[ key ]; 
    } 
    } 

    // return result 
    return result; 
} 

和相應的(反​​)序列:

var c1 = new Countdown(10); 
c1.tick(); 

console.log(c1); 

var s = JSON.stringify(c1); 

console.log(s); 

var c2 = Countdown.parse(JSON.parse(s)); 

console.log(c2); 
+0

非常感謝,儘管有一個錯誤。它應該是'c1.parse(JSON.parse(s));' – user3065579

+0

@ user3065579這個錯誤在'Countdown'的定義中更可能。解析方法不應該在原型上。我認爲將它附加到構造函數本身,而不是它的原型更清晰。 – Sirko

+0

是的,是有道理的 – user3065579