自定义localStorage js功能未在Chrome中运行

时间:2012-10-16 18:43:24

标签: javascript google-chrome local-storage

我正在尝试做什么:

在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>​

3 个答案:

答案 0 :(得分: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"。这不是一个功能,而且是正常的。

答案 1 :(得分:2)

试试这个:

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

<强> FIDDLE

答案 2 :(得分: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});