5

我正在尝试做的事情:

在 localStorage 之上创建我自己的存储 API,以便在我自己的代码中更容易使用。

为什么?

所以它有一个用于我目的的 API,以后可以扩展。

系统:

Chrome 版本:版本 22.0.1229.94 m

JSFiddle:http: //jsfiddle.net/ttback/kr88W/

错误

小提琴将在控制台中触发错误:

TypeError:对象#的属性“localStorageSave”不是函数

这适用于 IE 8 和 Firefox 16.0.1,所以我想知道我是否遗漏了某些东西或者它是 Chrome 错误。

代码:

<html>
<head>
<title>JS function not working in Chrome</title>
<script type="text/javascript">
var localStorage = localStorage || {};
localStorage.localStorageSave = function(){
    alert("SAVE");
};
localStorage.localStorageSave();
</script>
</head>
<body>

    
</body>

</html>​
4

3 回答 3

6

当你这样做

localStorage.localStorageSave = function(){
    alert("SAVE");
};

你做的和

localStorage["localStorageSave"] = function(){
    alert("SAVE");
};

或者

localStorage.setItem("localStorageSave", (function(){
    alert("SAVE");
}).toString());

实际上,您并没有在 localStorage 中保存函数,因为localStorage只保存字符串。

你可以检查它

console.log(typeof(localStorage.localStorageSave));

你得到"string". 这不是功能,是正常的。

于 2012-10-16T18:48:07.193 回答
2

试试这个:

localStorage.__proto__.localStorageSave = function(){
    alert("SAVE");
};

小提琴

于 2012-10-16T18:50:02.020 回答
2

您不应该扩展 window.localStorage。更好的方法是:

var myNameSpace = {};

myNameSpace.localStorage = {

    save: function (name, object) {

        //save to localStorage
        window.localStorage.setItem(name, window.JSON.stringify(object));

    }

}

myNameSpace.localStorage.save('testObject', {test: true});
于 2012-10-16T18:58:59.280 回答