Я пытаюсь создать автономное приложение HTML5, которое должно работать в большинстве современных браузеров (Chrome, Firefox, IE 9+, Safari, Opera). Поскольку IndexedDB не поддерживается Safari (пока), а WebSQL устарел, я решил использовать localStorage для хранения созданных пользователем JavaScript-объектов и JSON.stringify()
/JSON.parse()
для ввода или вытаскивания объектов. Однако я обнаружил, что JSON.stringify()
не обрабатывает методы. Вот пример объекта с простым методом:
var myObject = {};
myObject.foo = 'bar';
myObject.someFunction = function () {/*code in this function*/}
Если я строю этот объект (и позже поместил его в localStorage), все, что будет сохранено, будет myObject.foo
, а не myObject.someFunction()
.
//put object into localStorage
localStorage.setItem('myObject',JSON.stringify(myObject));
//pull it out of localStorage and set it to myObject
myObject = localStorage.getItem('myObject');
//undefined!
myObject.someFunction
Я уверен, что многие из вас, вероятно, уже знают об этом ограничении/функции/о том, что вы хотите назвать. Обходной путь, который я придумал, - создать объект с помощью методов (myObject = new objectConstructor()
), вытащить свойства объекта из localStorage и назначить их для нового объекта, который я создал. Я чувствую, что это окольный подход, но я новичок в мире JavaScript, так вот как я его решил. Итак, вот мой главный вопрос: я бы хотел, чтобы весь объект (свойства + методы) был включен в localStorage. Как мне это сделать? Если вы можете показать мне лучший алгоритм или, может быть, другой метод JSON, о котором я не знаю, я бы очень признателен.