我需要包装localStorage
的{{1}},setItem
和getItem
方法,以便我可以写出类似这样的内容
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) };
。我做错了什么?
答案 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允许您使用数组(或类似数组的对象,但如上面提到的旧浏览器所期望的实际数组)来指定应传递给您要调用的函数的各个参数