我想创建一个将项添加到localStorage对象的函数。 E.g:
alert(localStorage.getItem('names').addItem('Bill').getItem('names'));
第一个方法是getItem,它获取localStorage对象的项目......但addItem将是一个自定义函数。这一系列功能最终将提醒比尔。
那么,我如何将这个功能链变为localStorage?
答案 0 :(得分:5)
这是不可能的。
如果getItem('names')
返回Bill
,则无法在其上调用addItem
可以将addItem
和getItem
方法添加到存储中的每个项目,但这将是一个可怕的想法。
答案 1 :(得分:5)
这是可能的如果你创建一个包装/装饰对象,可以使链接成为可能。这就是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 );
答案 2 :(得分:0)
最简单的事情就是不要这样做:)
如果这不起作用,那么有一些解决方案,比如修改本地getItem
功能,但这是一个非常糟糕的主意。最好的方法是在localStorage
周围编写一个包装器,就像jQuery对DOM节点所做的那样,并使用该包装器来获取和放置本地存储中的项目。包装器可以有如下界面:
ApplicationStorage
getItem()
setItem()
key()
removeItem()
然后在Array
中定义ApplicationStorage
之类的可接受类型包装器,其中包含addItem
ApplicationStorage.Array
addItem()
调用applicationStorage.getItem("names")
时,返回包含方法ApplicationStorage.Array
的{{1}}对象,该方法将使链接成为可能。
答案 3 :(得分:0)
getItem('names').addItem('Bill').getItem('names')
我很困惑,你怎么得到一个没有添加的项目?
getItem返回一个包含addItem方法的对象,而addItem方法返回一个包含getItem方法的对象
无论如何,看看下面的教程。它并没有完全解决你的问题,但会给你一个想法。
http://guanfenglin.spaces.live.com/blog/cns!4E0822BF6C959B7F!668.entry