在JavaScript中链接一个函数? [英] Chaining a function in JavaScript?

查看:107
本文介绍了在JavaScript中链接一个函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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



那么,我该如何将这个函数链设置为localStorage?

如果创建一个使链接成为可能的包装器/装饰器对象,这是可能的。这是jQuery如何工作的例子。但在这种情况下毫无用处



但是,我做了一个可能的实现。



但是 getItem 会打破链(所以它应该总是在最后使用)。

  storage()。setItem('names','Bill' ).getItem( '姓名'); //或
storage()。setItem('names')。addItem('Bill')。getItem('names'); //或
storage()。key('names')。value('Bill')。set()。get('names');

执行
< pre $ (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:函数(value){
this._value = value;
返回this;
},

get:function(key){
key = isset(key)|| this._key;
返回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);
}
返回此;
},

//别名...
getItem:function(key){
return this.get(key);
},
setItem:function(key,value){
return this.set(key,value);
}
};

函数isset(value){
返回值!== undefined?值:false;
}

window.storage = storage;

})(window);


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 );

这篇关于在JavaScript中链接一个函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆