Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конструктор массива объектов и работа с ними через localStorage (https://javascript.ru/forum/misc/59186-konstruktor-massiva-obektov-i-rabota-s-nimi-cherez-localstorage.html)

pepel266 31.10.2015 14:01

Конструктор массива объектов и работа с ними через localStorage
 
Добрый день, есть вот такой код:
//конструктор объекта....
function BaseObj(){
	this.name = nameCase();
	this.rest = checkCache();
}
//конструктор массива объектов
function ArrBase(){
	var datBaseArr = [];
	var length = prompt('кол - во объектов:',1);
	if(!isNumeric(length)){
		ArrBase();
	}
	for(var i = 0;i < length;i++){
		datBaseArr.push(new BaseObj());
	}
	return datBaseArr;
}
//создание локальной базы данных на основе конструктора объектов.
localStorage.setItem('bases',JSON.stringify(ArrBase()));


Вопрос мой в следующем, нужна подсказка по доработке конструктора для работы с отдельными объектами из массива.
Допустим создано и записано в localStorage 3 объекта:
{name:молоко,rest:8}
{name:картошка,rest:3}
{name:кирпич,rest:7}
Как мне получить доступ к любому из них в отдельности и после манипуляций с ним изменения сохранились в localStorage?

ruslan_mart 31.10.2015 15:04

pepel266, никак, в локальное хранилище записывается всегда строка. Т.е., чтобы что-то изменить, мы получаем строку, преобразуем в объект, что-то меняем, преобразуем обратно в строку и записываем назад.

Если Вы хотите, чтобы при каждом изменении свойств объекта оно автоматически обновлялось в хранилище, то придётся вешать сеттеры.

pepel266 31.10.2015 15:58

Цитата:

Сообщение от Ruslan_xDD (Сообщение 393843)
[b]то придётся вешать сеттеры.

Можно подробнее? Я только изучаю JS и не все сразу сходу понимаю....
Не совсем разобрался с "конструкторами и прототипами"
Подскажите в каком направлении двигаться в расширении конструктора BaseObj()?

ruslan_mart 31.10.2015 17:14

pepel266, лучше так:

function storageObject(itemName) {
	var object = window.localStorage.getItem(itemName);
	this.itemName = itemName;
	this.data = object ? JSON.parse(object) : {};
};
storageObject.prototype.remove = function() {
	window.localStorage.removeItem(this.itemName);
};
storageObject.prototype.save = function() {
	window.localStorage.setItem(this.itemName, JSON.stringify(this.data));
};




var base = new storageObject('base');

base.data.foo = 'bar';
base.data.one = 'two';
base.data.bla = {};

base.save();

pepel266 31.10.2015 18:08

Спасибо!

Vlasenko Fedor 31.10.2015 18:16

Ruslan_xDD,
Цитата:

Сообщение от Ruslan_xDD
this.data = object && JSON.parse(object) || {};

this.data здесь чему будет равно ?

pepel266 31.10.2015 18:31

Как я понял тому,что вы запишите в base.data, например:
base.data.foo = ArrBase();
будет создан объект foo в котором будет массив объектов созданных с помощью ArrBase().

рони 31.10.2015 18:58

pepel266,
http://javascript.ru/forum/project/2...s-obektom.html

FINoM 31.10.2015 19:16

рони, прикольно, что кто-то помнит о моей древней поделке.

Последний коммит сделан давно, да и тестов нету. Несмотря на эти минусы, недавно заюзал эту штуку снова, работает хорошо. Вот репка.

Vlasenko Fedor 31.10.2015 19:56

Цитата:

Сообщение от FINoM
прикольно, что кто-то помнит о моей древней поделке

так может пора переписать с учетом нынешних знаний, на гетерах сеттерах, добавить подписку на события
defaultDuration - че за зверь?


Часовой пояс GMT +3, время: 13:24.