Dưới đây là phiên bản phản hồi của Aamir Afridi được sắp xếp gọn gàng, giữ tất cả mã của nó được gói gọn trong phạm vi cục bộ.
Tôi đã xóa các tham chiếu tạo ret
biến toàn cục và cũng xóa phân tích cú pháp của các chuỗi "true" và "false" được lưu trữ thành các giá trị boolean trong BrowserStorage.get()
phương thức, điều này có thể gây ra sự cố nếu một người đang cố gắng lưu trữ các chuỗi "true" hoặc "sai".
Vì API lưu trữ cục bộ chỉ hỗ trợ các giá trị chuỗi, nên người ta vẫn có thể lưu trữ / truy xuất dữ liệu biến JavaScript cùng với các kiểu dữ liệu thích hợp của chúng bằng cách mã hóa dữ liệu đã nói thành một chuỗi JSON, sau đó có thể được giải mã bằng thư viện mã hóa / giải mã JSON như https: //github.com/douglascrockford/JSON-js
var BrowserStorage = (function() {
/**
* Whether the current browser supports local storage as a way of storing data
* @var {Boolean}
*/
var _hasLocalStorageSupport = (function() {
try {
return 'localStorage' in window && window['localStorage'] !== null;
} catch (e) {
return false;
}
})();
/**
* @param {String} name The name of the property to read from this document's cookies
* @return {?String} The specified cookie property's value (or null if it has not been set)
*/
var _readCookie = function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
};
/**
* @param {String} name The name of the property to set by writing to a cookie
* @param {String} value The value to use when setting the specified property
* @param {int} [days] The number of days until the storage of this item expires
*/
var _writeCookie = function(name, value, days) {
var expiration = (function() {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
return "; expires=" + date.toGMTString();
}
else {
return "";
}
})();
document.cookie = name + "=" + value + expiration + "; path=/";
};
return {
/**
* @param {String} name The name of the property to set
* @param {String} value The value to use when setting the specified property
* @param {int} [days] The number of days until the storage of this item expires (if storage of the provided item must fallback to using cookies)
*/
set: function(name, value, days) {
_hasLocalStorageSupport
? localStorage.setItem(name, value)
: _writeCookie(name, value, days);
},
/**
* @param {String} name The name of the value to retrieve
* @return {?String} The value of the
*/
get: function(name) {
return _hasLocalStorageSupport
? localStorage.getItem(name)
: _readCookie(name);
},
/**
* @param {String} name The name of the value to delete/remove from storage
*/
remove: function(name) {
_hasLocalStorageSupport
? localStorage.removeItem(name)
: this.set(name, "", -1);
}
};
})();