Я хочу сделать функцию, которые добавляют объект к моему объекту localStorage. Например:
alert(localStorage.getItem('names').addItem('Bill').getItem('names'));
Первый метод является getItem, который получает объект для объектов localStorage..., но addItem был бы пользовательской функцией. Эта цепочка функций наконец предупредила бы счет.
Так, как я сделал бы эту функциональную цепочку к localStorage?
Это возможно , если вы создаете объект-оболочку / декоратор , который делает возможным создание цепочки. Так, например, работает jQuery. Но в данном случае он бесполезен .
Однако я сделал возможную реализацию.
Но getItem разорвет цепочку (поэтому его всегда следует использовать в конце).
storage().setItem('names', 'Bill').getItem('names'); // or
storage().setItem('names').addItem('Bill').getItem('names'); // or
storage().key('names').value('Bill').set().get('names');
Реализация
(function( window, undefined ) {
var storage = function( key, value ) {
return new storage.init( key, value );
};
storage.init = function( key, value ) {
this._key = key;
this._value = value;
};
storage.init.prototype = {
key: function( key ) {
this._key = key;
return this;
},
value: function( value ) {
this._value = value;
return this;
},
get: function( key ) {
key = isset(key) || this._key;
return localStorage.getItem( key );
},
set: function( key, value ) {
this._key = key = isset(key) || this._key;
this._value = value = isset(value) || this._value;
if ( key && value ) {
localStorage.setItem( key, value );
}
return this;
},
addItem: function( value ) {
this._value = isset(value) || this._value;
if ( this._key && value !== undefined ) {
localStorage.setItem( this._key, value );
}
return this;
},
// aliases...
getItem: function( key ) {
return this.get( key );
},
setItem: function( key, value ) {
return this.set( key, value );
}
};
function isset( value ) {
return value !== undefined ? value : false;
}
window.storage = storage;
})( window );
Это невозможно.
Если getItem ('names')
возвращает Bill
, вы не можете вызвать для него addItem
.
Можно было бы добавить методы addItem
и getItem
к каждому элементу в хранилище, но это было бы ужасной идеей.
Самое простое - не делать этого вообще :)
Если это не сработает, то есть решения вроде модификации родной функции getItem
, но это очень плохая идея. Лучшим способом было бы написать обертку вокруг localStorage
, подобно тому, как это делает jQuery для узлов DOM, и использовать эту обертку для получения и помещения элементов в локальное хранилище. Обертка может иметь интерфейс типа:
ApplicationStorage
getItem()
setItem()
key()
removeItem()
Затем определите обертки допустимых типов, таких как Array
в ApplicationStorage
, которые имеют методы типа addItem
ApplicationStorage.Array
addItem()
When applicationStorage. getItem("names")
вызывается, возвращаем объект ApplicationStorage.Array
, который содержит метод addItem
, что сделает возможным создание цепочки.
getItem('names').addItem('Bill').getItem('names')
Я не понимаю, как получить предмет который не был добавлен ???
getItem возвращает объект, содержащий метод addItem, а метод addItem возвращает объект, содержащий метод getItem
В любом случае, посмотрите следующий учебник. Это не решит полностью вашу проблему, но даст вам представление.
http://guanfenglin.spaces.live.com/blog/cns!4E0822BF6C959B7F!668.entry