我无法弄清楚如何存储包含方法的对象。如果我使用
localStorage.setItem('inventory', JSON.stringify(hero.inventory));
和库存中的一些项目(对象)有方法,我只获取属性
hero.inventory = JSON.parse(localStorage.getItem('inventory'));
如何在不收到循环错误的情况下存储和检索具有所有属性和方法的对象?
答案 0 :(得分: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;
}
各自(de)序列化:
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 );