这次主要是Storage原型中添加自己的方法
对象原型中添加一个链
/**
* 对象原型中添加一个链
* @parma oChain 当前对象
* @parma oProto 链
*/
Reflect.appendChain = function(oChain, oProto) {
if (arguments.length < 2) {
throw new TypeError('Object.appendChain - Not enough arguments');
}
if (typeof oProto === 'number' || typeof oProto === 'boolean') {
throw new TypeError('second argument to Object.appendChain must be an object or a string');
}
var oNewProto = oProto,
oReturn,
o2nd,
oLast;
oReturn = o2nd = oLast = oChain instanceof Object ? oChain : new oChain.constructor(oChain);
for (var o1st = this.getPrototypeOf(o2nd);
o1st !== Object.prototype && o1st !== Function.prototype;
o1st = this.getPrototypeOf(o2nd)
) {
o2nd = o1st;
}
if (oProto.constructor === String) {
oNewProto = Function.prototype;
oReturn = Function.apply(null, Array.prototype.slice.call(arguments, 1));
this.setPrototypeOf(oReturn, oLast);
}
this.setPrototypeOf(o2nd, oNewProto);
return oReturn;
}
自定义方法(Storage可以添加数组了)
function StorageMethod() {}
StorageMethod.prototype = {
getStorage(sname, defaultValue){
var result = this.getItem(sname);
return result || defaultValue;
},
setStorage(sname, svalue){
if(Array.isArray(svalue)) {
svalue = svalue.join("|");
}
this.setItem(sname, svalue);
},
getStorageArray(sname) {
return this.getItem(sname).split("|");
},
getAllKeys(){
var arr = [];
for(var i=0;i<this.length;i++){
arr.push(this.key(i));
}
return arr;
}
}
使用
为localStorage和sessionStorage添加自定义方法,这个方法类似拷贝继承
if(!window.localStorage || !window.localStorage){
alert('your browser is not support Storage!');
return;
}
// localStorage和sessionStorage添加StorageMethod的方法
Reflect.appendChain(window.localStorage, new StorageMethod());
Reflect.appendChain(window.sessionStorage, new StorageMethod());
测试
window.sessionStorage.setStorage("test", [112,2,'ds'])
console.log(window.sessionStorage.getStorageArray("test"))