Я пытаюсь разработать автономное приложение HTML5, которое должно работать в большинстве современных браузеров (Chrome, Firefox, IE 9+, Safari, Opera). Поскольку IndexedDB не поддерживается Safari (пока), а WebSQL устарел, я решил использовать localStorage для хранения созданных пользователем объектов JavaScript и JSON.stringify()
/JSON.parse()
для ввода или вытаскивания объектов. Однако я обнаружил, что JSON.stringify()
не обрабатывает методы. Ниже приведен пример объекта с помощью простого метода:json.stringify не обрабатывает методы объекта
var myObject = {};
myObject.foo = 'bar';
myObject.someFunction = function() {/*code in this function*/}
Если я stringify этот объект (а затем положить его в 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, о котором я не знаю, я бы очень признателен.
функции не существует в формате JSON. См .: http://json.org. –
Вот что я подумал после прочтения спецификации, но есть ли у вас способ сохранить методы? Или мой способ, как вы это сделаете? – user2649759
Возможный дубликат функции [JSON.stringify] (http://stackoverflow.com/questions/6754919/json-stringify-function) – Bergi