使用localStorage保存方法

时间:2014-02-11 13:27:11

标签: javascript json html5

我无法弄清楚如何存储包含方法的对象。如果我使用 localStorage.setItem('inventory', JSON.stringify(hero.inventory));

和库存中的一些项目(对象)有方法,我只获取属性 hero.inventory = JSON.parse(localStorage.getItem('inventory'));

如何在不收到循环错误的情况下存储和检索具有所有属性和方法的对象?

1 个答案:

答案 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 );