Javascript 从localStorage解析ES6类对象不需要';不包括类函数

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() {

我想在HTML5 localStorage中持久化一个类对象。该类包含我也需要持久化的方法,但解析localStorage对象会发现该对象不同

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