从localStorage解析ES6类对象不包括类功能
问题描述:
我想在HTML5 localStorage中保留一个类对象。该类包含我也需要坚持的方法,但是解析localStorage对象表明该对象不相同。从localStorage解析ES6类对象不包括类功能
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
,它不再包括构造函数或方法。
我如何能坚持与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")))
考虑到静态fromJSON(json)的mehod签名,可以考虑传递文本。然后在方法中做一些类似'return Object.assign(new ExcitingMath(),JSON.parse(text))''。有关属性,请参见[* Object.assign *](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-object.assign)。所以它会是'ExcitingMath.fromJSON(文本)'。 ;-)。 – RobG