javascript - 从 localStorage 解析 ES6 类对象不包括类函数

标签 javascript class local-storage persistence

我想在 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 会显示类对象及其属性和方法:

enter image description here

但是,当我 localStorage.setItem("math", JSON.stringify(eMath));JSON.parse(localStorage.getItem("math")); code> 与 localStorage 之间的对象,它不再包含构造函数或方法。

enter image description here

如何使用 localStorage 保存原始类实例?

最佳答案

这是不可能的,因为 JSON.toString 仅保存对象的状态,而不是您已经发现的对象的函数。我遇到了同样的“问题”,并在我的类中编写了一个函数“fromJSON”,该函数从本地存储中获取 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")))

关于javascript - 从 localStorage 解析 ES6 类对象不包括类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626064/

相关文章:

javascript - DataTable 中的 Actionbutton 不起作用,Shiny DT

javascript - 为什么我的 url 在使用 angular 时包含 "!"?

javascript localstorage 两个div

javascript - 使用字符串检索对象的值

javascript - node.js 获取相对于文件的项目/src 路径

Java 类和构造函数

c++ - C++中类定义的问题

python - 我可以从一个类获取 rect.x 以在另一类中使用吗?

javascript - 这个本地存储代码有问题吗?

javascript - backbone.js 和具有多个浏览器选项卡/窗口的本地存储会覆盖数据