Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用localStorage保存方法_Javascript_Json_Html - Fatal编程技术网

Javascript 使用localStorage保存方法

Javascript 使用localStorage保存方法,javascript,json,html,Javascript,Json,Html,我不知道如何存储包含方法的对象。如果我使用 setItem'inventory',JSON.stringifyhero.inventory 而且清单中的一些ItemsObject有方法,我只获取带有的属性 hero.inventory=JSON.parselocalStorage.getItem'inventory' 您如何存储和检索对象及其所有属性和方法而不出现循环错误?简短回答:您不能 详细回答: 只能在localStorage中存储字符串。这就是为什么首先要使用JSON.stringify

我不知道如何存储包含方法的对象。如果我使用 setItem'inventory',JSON.stringifyhero.inventory

而且清单中的一些ItemsObject有方法,我只获取带有的属性 hero.inventory=JSON.parselocalStorage.getItem'inventory'

您如何存储和检索对象及其所有属性和方法而不出现循环错误?

简短回答:您不能

详细回答: 只能在localStorage中存储字符串。这就是为什么首先要使用JSON.stringify和JSON.parse

请参阅以了解规避此问题的方法

或者,您的对象可以包含一个构造函数/方法,如果给定所有非方法属性,该构造函数/方法将使用所有方法重构完整的对象

非常基本的例子:

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

你应该只存储值,而不是方法。非常感谢,尽管有一个bug。应该是c1.parse JSON.parse s@user3065579在倒计时的定义中更可能出现错误。解析方法不应位于原型上。我认为将它附加到构造函数本身比它的原型更干净。