I want to make a function that add an item to my localStorage object. E.g.:
alert(localStorage.getItem('names').addItem('Bill').getItem('names'));
The first method is getItem which gets the item for localStorage objects... but addItem would be a custom function. This chain of functions would finally alert Bill.
So, how would I make this function chain to localStorage?
This is possible if you create a wrapper/decorator object that makes chaining possible. This is how jQuery works for example. But it is useless in this case.
I made a possible implementation, though.
But getItem will break the chain (so it should always be used at the end).
storage().setItem('names', 'Bill').getItem('names'); // or
storage().setItem('names').addItem('Bill').getItem('names'); // or
storage().key('names').value('Bill').set().get('names');
Implementation
(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 );
                        This is impossible.
If getItem('names') returns Bill, you can't call addItem on it.
It would be possible to add addItem and getItem methods to every item in the storage, but it would be a horrible idea.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With