Я заглянул в новое локальное хранилище HTML 5, и оно пока выглядит довольно круто.Я решил использовать JSON, чтобы сериализовать мои объекты в строки и проанализировать их обратно в объекты, что звучит очень хорошо.Однако легче сказать, чем сделать.Я обнаружил, что вы не можете просто JSON.stringify()
объект и ожидать, что он будет хорошо упакован для вас, но я не могу понять, что я должен сделать вместо этого.
Это еще не все: мой объект содержит два массива, каждый из которых содержит объект другого типа и один из которых является многомерным.Вот как выглядит моя довольно сложная и взаимозависимая архитектура объектов:
function Vector2(x, y) {
this.x = x;
this.y = y;
}
function Bar(ID, position) {
this.id = id;
this.position = position;
}
function Goo(state, position) {
this.on = state;
this.position = position;
}
function Foo(name, size) {
this.name = name;
this.size = size;
this.bars = new Array(width)
this.goos = new Array(10);
this.Initialize();
}
Foo.prototype.Initialize() {
for(var x = 0;x<this.size.x;x++) {
this.bars[x] = new Array(this.size.y);
for(var y=0;y<this.size.y;y++) {
this.bars[x][y] = new Bar(x + y, new Vector2(x, y));
}
}
for(var i = 0;i<this.goos.length;i++) {
this.goos[i] = new Goo(on, new Vector2(i, i/2 + 1));
}
}
Каждый из этих объектов также имеет множество дополнительных функций, каждый из которых добавляется с использованием того же метода-прототипа, который я использовал для добавления метода вFoo.Как я уже сказал, сложный.У меня вопрос, как мне все это сериализовать?Мне действительно нужно прикрепить toJSON()
функции к каждому объекту?
Наконец, как только я собрал все это и сохранил в localstorage
, я знаю, как его получить, но я не знаю, как распаковать его с JSON.Это другой вопрос для другого времени, и я подозреваю, что было бы немного легче разобраться самому, когда я научусь собирать все вещи.
Примечание: я обычно не был бы таким потенциально широкимвопрос, но я не смог найти ничего здесь, на SO или с моим (по общему признанию, слабым) Google-фу, который действительно решает проблему, и я не знаю, как разбить этот вопрос дальше.