Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Работа с локальным хранилищем, как с объектом (https://javascript.ru/forum/project/28192-rabota-s-lokalnym-khranilishhem-kak-s-obektom.html)

Gvozd 11.05.2012 04:30

Цитата:

Сообщение от devote
дык может не != а все же ==
не?

вы правы

FINoM 11.05.2012 04:34

Цитата:

Сообщение от devote
дык может не != а все же ==
не?

Пофиг, главное мысль понятна :)

FINoM 29.05.2012 22:29

var Storage = function Storage ( name, duration ) {
	this._name = name || this._name;
	this._duration  = duration || this._duration;
	this._init();
}

Storage.prototype = {
	_name: '_nameOfYourSrorage',
	_duration: 5000,
	// type == local || session
	_save: function( type ) {
		window[ type + 'Storage' ].setItem( this._name, JSON.stringify( this[ type ] ) );
	},
	
	_get: function( type ) {
		this[ type ] = JSON.parse( window[ type + 'Storage' ].getItem( this._name ) ) || {};
	},
	 
	_init: function() {
		var self = this;
		self._get( 'local' );
		self._get( 'session' );
		
		( function callee() {
			setTimeout( function() {
				self._save( 'local' );
				callee();
			}, self._duration );
		})();
		
		window.addEventListener( 'beforeunload', function() {
			self._save( 'local' );
			self._save( 'session' );
		} );
	},
	
	local: {},
	session: {}
};
Вот самый адекватный и производительный вариант использования хранилища, как объекта. Взял из своего проекта, может быть кому-то будет полезным.
var storage = new Storage;
storage.local = {a:4, b: {c:5}};
storage.session = {a:7, b: {c:8}};
b = storage.local.b;
b.c = {d:6};

Стоит объяснять что к чему?

Раед 29.05.2012 22:36

FINoM,
Гениально! Просто, удобно (никакой асинхронности). Спасибо:thanks:

melky 29.05.2012 22:38

FINoM, видел ваш пост на хабре.

жаль, что вы про IE забыли :( там ведь чуточку сложнее, и все по-другому. но использование одинаковое.

FINoM 29.05.2012 22:39

Цитата:

Сообщение от Раед
(никакой асинхронности)

Вон Гвоздь показал, как убрать асинхронность. Но решение всё равно осталось очень тяжелым и неудобным.
А этот вариант на хабре предложили, моя заслуга здесь только в нескольких строках кода.

FINoM 29.05.2012 22:40

Цитата:

Сообщение от melky
жаль, что вы про IE забыли

В посте? Не стоит его воспринимать всерьез. Решение плохое.

Раед 29.05.2012 22:51

Цитата:

Сообщение от FINoM
Не стоит его воспринимать всерьез. Решение плохое.

Почему?

FINoM 29.05.2012 23:06

Цитата:

Сообщение от Раед
Почему?

При любом запросе чего-либо из хранилища, происходит стрингификация объекта и сохранение в localStorage.
objectLocalStorage.a ← вызовет эту сложную операцию.
Кроме этого,
objectLocalStorage.a.b = 5; // сработает
a = objectLocalStorage.a;
a.b = 5; // не сработает

Раед 29.05.2012 23:13

FINoM,
Мы с вами кажется про разные посты говорим. Я про этот, а вы про этот


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