2011-10-14 5 views
0

localStorage에서 객체를 저장하고 검색하는 데 JSON.stringifyJSON.parse을 사용하고 있습니다. 그러나 JSON.stringify은 개체의 인스턴스 함수를 제거합니다. 따라서 JSON.parse 이후에는 더 이상 myObject.doSomething()으로 전화 할 수 없습니다. 이 기능을 수동으로 부착 할 수 있다는 것을 알고 있습니다 : myObject.doSomething = MyClass.prototype.myFunction,하지만이 작업이 웹 앱에서 여러 번 반복 될 경우 문제가 될 것입니다. 사람들은 JavaScript로 이것을 어떻게 정상적으로합니까?localstorage에서 검색된 객체 함수를 다시 작성하십시오.

+0

'localStorage'는 객체를 값으로 유지할 수있게하며, 키는 문자열이어야합니다. 문자열로 저장하려는 특별한 이유가 있습니까? –

+0

유일한 이유는이 사이트의 어딘가에서 가장 최근의 브라우저가 localStorage에 대한 문자열만을 지원한다는 것을 읽었습니다. 사양에 따라 객체를 지원해야한다고 하더군요. 사실입니까? – pckben

+0

Chrome을 사용하여 방금 테스트 한 결과 localStorage에서 가져온 개체는'[object Object]'입니다. 유형을 복원하려면 어떻게해야합니까? 인스턴스 메서드와 속성을 호출 해 보았지만 정의되지 않았습니다. – pckben

답변

2

JSON은 분명히 단순한 형식화 된 변수 만 저장하는 함수 자체를 보유하지 않습니다. 패스에서이 문제를 해결 한 방법은 클래스의 복원 방법이며 JSON의 데이터로 해당 메소드를 호출하여 클래스에 속한 데이터로 클래스를 다시 채우는 것입니다.

나는이 코드베이스에서 VO (Value Object) 디자인 패턴을 광범위하게 사용했으며, 저에게는 꽤 잘 맞았습니다. 그러나주의를 기울여야 할 한마디로, Ie7/Ie8은 윈도우를 통해 통신을 시도 할 경우이 접근법과 매우 친숙하지 않습니다. 내가 기억하기로는 IE7이 일부 속성에 올바른 "typeof"를 반환하지 않는다고 생각하기 때문에 교차 창 통신이 포함되었을 때 복원 할 때 많은 어려움을 겪었습니다.

+0

그래서 JS에서 이것을 할 우아한 방법이 없다고 생각하십니까? 다른 사람이 다른 제안을 내놓기 전에 며칠을 더 기다려야 답변을 표시 할 수 있습니다 ... – pckben

관련 문제