5

localStorageオブジェクトにアイテムを追加する関数を作成したいと思います。例えば:

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

最初のメソッドは、localStorageオブジェクトのアイテムを取得するgetItemです...ただし、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.ArrayaddItem

于 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 に答える