2017-06-19 2 views
4

どのようなタイプのストレージオブジェクトが「これ」なのかを知りたいですか? のは、あなたがこの機能を持って言ってみましょう:どのようなタイプのストレージがJavaScriptで「this」ですか?

Storage.prototype.typeOf=function(){return this;} 

今、あなたはのsessionStorageかのlocalStorageにデータが表示されます。しかし、JSコードでこの情報を取得するには?試しました

Storage.prototype.typeOf=function(){ 
    var x=this; 
    alert(this) 
} 

これは[オブジェクトストレージ]だけを返しますが、これは私が検索したものではありません。
私はStorage型の利用可能なメソッドを見てきましたが、実際の型は返されませんでした。この情報を取得する方法はありますか?

+0

'this === sessionStorage'と' this === localStorage'を試しましたか? – sbking

+0

私はJavaScriptでこれをチェックする "正しい"方法はないと思います。 JavaScriptには一つの一般的な 'Storage'タイプしかありません。これは、それが接続しているブラウザのストレージシステムを公開していません。もちろん、 'this == sessionStorage'のようなものをチェックすることはできますが、もっと良い解決策はないと思います...しかし良い質問です。 –

答えて

2

残念ながら、ストレージオブジェクトは、ローカルストレージまたはセッションストレージを提供するかどうかを区別するために使用できるプロパティを公開していません。これを確認するには、Google Chromeでthe HTML storage specificationmuch of the source code used to implement itを読んだだけです。

唯一の選択肢は、StorageオブジェクトのIDをグローバル定義と比較することです。これを直接行うだけで、メソッド内でラッピングするのは面倒ではないかもしれません。

if (someStorage === window.localStorage) { 
    // ... 
} else if (someStorage === window.sessionStorage) { 
    // ... 
} 
2

Storageオブジェクトには2種類しかないので、明示的にチェックすることができます。

Storage.prototype.typeOf = function() { 
    if (this === window.localStorage) { 
    return 'localStorage'; 
    } 
    return 'sessionStorage'; 
}; 

console.log(localStorage.typeOf()); // 'localStorage' 
console.log(sessionStorage.typeOf()); // 'sessionStorage' 

これらはそれぞれStorageオブジェクトの特別なインスタンスなので、各インスタンスがどの変数に割り当てられているかを判断する一般的な方法はありません。

関連する問題