如何包装localStorage方法

时间:2013-12-26 07:15:59

标签: javascript

我需要包装localStorage的{​​{1}},setItemgetItem方法,以便我可以写出类似这样的内容

removeItem

我以前做得很好很简单

local.set('foo', 'bar'); // equivalent to localStorage.setItem('foo', 'bar')

在我了解Firefox doesn't like this approach之前。所以我将代码更改为

local.set = localStorage.setItem

但现在我收到错误local.set = function() { return localStorage.setItem(arguments) }; 。我做错了什么?

1 个答案:

答案 0 :(得分:2)

试试这个:

local.set = function() { return localStorage.setItem.apply(localStorage, arguments) };

要与旧版浏览器兼容,您需要将arguments转换为数组:

local.set = function() {
    return localStorage.setItem.apply(localStorage, [].slice.call(arguments));
};

你的方式是将arguments类似数组的对象作为唯一参数传递给localStorage.setItem(),这意味着它就像这样:

localStorage.setItem(['foo', 'bar']);     // wrong - one argument

而不是:

localStorage.setItem('foo', 'bar');       // right - two arguments

使用.apply() method允许您使用数组(或类似数组的对象,但如上面提到的旧浏览器所期望的实际数组)来指定应传递给您要调用的函数的各个参数