Javascript 从localStorage解析ES6类对象不需要';不包括类函数
我想在HTML5 localStorage中持久化一个类对象。该类包含我也需要持久化的方法,但解析localStorage对象会发现该对象不同Javascript 从localStorage解析ES6类对象不需要';不包括类函数,javascript,class,local-storage,persistence,Javascript,Class,Local Storage,Persistence,我想在HTML5 localStorage中持久化一个类对象。该类包含我也需要持久化的方法,但解析localStorage对象会发现该对象不同 class ExcitingMath { constructor(firstNumber, secondNumber) { this._firstNumber = firstNumber; this._secondNumber = secondNumber; } add() {
class ExcitingMath {
constructor(firstNumber, secondNumber) {
this._firstNumber = firstNumber;
this._secondNumber = secondNumber;
}
add() {
return this._firstNumber + this._secondNumber;
}
subtract() {
return this._firstNumber - this._secondNumber;
}
}
const eMath = new ExcitingMath(2, 4);
控制台中的日志eMath
显示类对象及其属性和方法:
然而,当我localStorage.setItem(“math”,JSON.stringify(eMath))
和JSON.parse(localStorage.getItem(“math”)
本地存储的对象,它不再包括构造函数或方法
如何使用localStorage持久化原始类实例?这是不可能的,因为JSON.toString只保存对象的状态,而不是您已经发现的对象的函数。我也遇到了同样的“问题”,在我的类中编写了一个函数“fromJSON”,它从localstorage获取JSON并将其转换为一个对象,如下所示:
class ExcitingMath {
constructor(firstNumber, secondNumber) {
this._firstNumber = firstNumber;
this._secondNumber = secondNumber;
}
add() {
return this._firstNumber + this._secondNumber;
}
subtract() {
return this._firstNumber - this._secondNumber;
}
static fromJSON(serializedJson) {
return Object.assign(new ExcitingMath(), JSON.parse(serializedJson))
}
}
const eMath = ExcitingMath.fromJSON(JSON.parse(localStorage.getItem("math")))
然后,您可以按如下方式使用它:
class ExcitingMath {
constructor(firstNumber, secondNumber) {
this._firstNumber = firstNumber;
this._secondNumber = secondNumber;
}
add() {
return this._firstNumber + this._secondNumber;
}
subtract() {
return this._firstNumber - this._secondNumber;
}
static fromJSON(serializedJson) {
return Object.assign(new ExcitingMath(), JSON.parse(serializedJson))
}
}
const eMath = ExcitingMath.fromJSON(JSON.parse(localStorage.getItem("math")))
这是不可能的,因为JSON.toString只保存对象的状态,而不是您已经发现的对象的函数。我也遇到了同样的“问题”,在我的类中编写了一个函数“fromJSON”,它从localstorage获取JSON并将其转换为一个对象,如下所示:
class ExcitingMath {
constructor(firstNumber, secondNumber) {
this._firstNumber = firstNumber;
this._secondNumber = secondNumber;
}
add() {
return this._firstNumber + this._secondNumber;
}
subtract() {
return this._firstNumber - this._secondNumber;
}
static fromJSON(serializedJson) {
return Object.assign(new ExcitingMath(), JSON.parse(serializedJson))
}
}
const eMath = ExcitingMath.fromJSON(JSON.parse(localStorage.getItem("math")))
然后,您可以按如下方式使用它:
class ExcitingMath {
constructor(firstNumber, secondNumber) {
this._firstNumber = firstNumber;
this._secondNumber = secondNumber;
}
add() {
return this._firstNumber + this._secondNumber;
}
subtract() {
return this._firstNumber - this._secondNumber;
}
static fromJSON(serializedJson) {
return Object.assign(new ExcitingMath(), JSON.parse(serializedJson))
}
}
const eMath = ExcitingMath.fromJSON(JSON.parse(localStorage.getItem("math")))
给定代码< MyHod签名>静态JSON(JSON)< /C> >考虑只传递文本。然后在方法中执行类似于
返回Object.assign(new-ExcitingMath(),JSON.parse(text))
的操作。有关属性,请参见。因此,它将是ExcitingMath.fromJSON(text)
;-)。给定代码< MyHod签名>静态JSON(JSON)< /C> >考虑只传递文本。然后在方法中执行类似于返回Object.assign(new-ExcitingMath(),JSON.parse(text))
的操作。有关属性,请参见。因此,它将是ExcitingMath.fromJSON(text)
;-)。