2017-04-26 7 views
0

HTML5 localStorage에서 클래스 객체를 유지하려고합니다. 클래스에는 또한 유지해야하는 메소드가 포함되어 있지만 localStorage 객체를 구문 분석하면 객체가 동일하지 않다는 것을 알 수 있습니다. 콘솔에서 eMath 로깅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); 

은 그것으로 클래스 객체의 표시 속성과 메소드 :

enter image description here 그러나

, 나는 localStorage.setItem("math", JSON.stringify(eMath));JSON.parse(localStorage.getItem("math"));localStorage에서 개체, 그것은 더 이상을 포함 생성자 또는 메소드.

enter image description here

어떻게 로컬 스토리지와 원래의 클래스 인스턴스를 지속 할 수 있습니까?

답변

3

JSON.toString은 객체의 상태를 저장하지만 객체의 기능은 이미 저장했기 때문에 불가능합니다. 저도 같은 "문제"에 직면하고 로컬 스토리지에서 JSON을 취하고 대상으로 다음과 같은 것을 변환 내 수업에서 함수 "fromJSON"쓴 다음과 같이

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"))) 
+2

'static 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 (text)'일 것입니다. ;-). – RobG