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

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 に答える
2

これを試して:

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

フィドル

于 2012-10-16T18:50:02.020 に答える