5

我想创建一个将项目添加到我的 localStorage 对象的函数。例如:

alert(localStorage.getItem('names').addItem('Bill').getItem('names'));

第一种方法是 getItem ,它获取 localStorage 对象的项目......但 addItem 将是一个自定义函数。这一系列功能最终会提醒比尔。

那么,我如何将这个函数链添加到 localStorage?

4

4 回答 4

5

这是不可能的。

如果getItem('names')返回Bill,则不能调用addItem它。
可以为存储中的每个项目添加addItemgetItem方法,但这将是一个可怕的想法。

于 2010-07-04T22:28:07.223 回答
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 );
于 2010-07-04T22:49:33.053 回答
0

最简单的事情就是根本不这样做:)

如果这不起作用,那么有像修改本机getItem函数这样的解决方案,但这是一个非常糟糕的主意。最好的方法是围绕 编写一个包装器localStorage,就像 jQuery 对 DOM 节点所做的那样,并使用该包装器获取项目并将其放入本地存储中。包装器可以具有如下接口:

ApplicationStorage
    getItem()
    setItem()
    key()
    removeItem()

然后定义可接受的类型包装器,如其中具有类似的Array方法ApplicationStorageaddItem

ApplicationStorage.Array
    addItem()

applicationStorage.getItem("names")被调用时,返回一个对象,ApplicationStorage.Array该对象包含addItem使链接成为可能的方法。

于 2010-07-04T22:54:41.517 回答
0
getItem('names').addItem('Bill').getItem('names')

我很困惑,你怎么得到一个没有添加的项目???

getItem 返回一个对象包含 addItem 方法,而 addItem 方法返回一个对象包含 getItem 方法

无论如何,看看下面的教程。它并不能完全解决您的问题,但会给您一个想法。

http://guanfenglin.spaces.live.com/blog/cns!4E0822BF6C959B7F!668.entry

于 2010-07-04T22:58:45.410 回答