/*
数据访问对象模式:
抽象和封装对数据源的访问与存储,DAO通过对数据源链接的管理方便对数据的访问与存储。
*/
var BaseLocalStorage = function(preId, timeSign) {
//定义本地存储数据库前缀
this.preId = preId;
//定义时间戳与存储数据之间的拼接符
this.timeSign = timeSign || '|-|';
}
BaseLocalStorage.prototype = {
//操作状态
status: {
SUCCESS: 0,
FAILURE: 1,
OVERFLOW: 2,
TIMEOUT: 2
},
storage: localStorage || window.localStorage,
//获取本地存储数据库数据真实字段
getKey: function(key) {
return this.preId + key;
},
//添加(修改)数据
set: function(key, value, callback, time) {
var status = this.status.SUCCESS,
key = this.getKey(key);
try {
time = new Date(time).getTime() || time.getTime();
} catch (e) {
time = new Date().getTime() + 1000 * 60 * 60 * 24 * 31;
}
try {
this.storage.setItem(key, time + this.timeSign + value);
} catch (e) {
status = this.status.OVERFLOW;
}
callback && callback.call(this, status, key, value);
},
get: function(key, callback) {
var status = this.status.SUCCESS,
key = this.getKey(key),
value = null,
//时间戳与存储数据之间的拼接符长度
timeSignLen = this.timeSign.length,
that = this,
index,
time,
result;
try {
value = that.storage.getItem(key);
} catch (e) {
result = {
status: that.status.FAILURE,
value: null
}
callback && callback.call(this, result.status, result.value);
}
if (value) {
index = value.indexOf(that.timeSign);
time = +value.slice(0, index);
//如果时间过期
if (new Date(time).getTime() > new Date().getTime() || time == 0) {
value = value.slice(index + timeSignLen);
} else {
value = null;
status = that.status.TIMEOUT;
that.remove(key);
}
} else {
status = that.status.FAILURE;
}
result = {
status: status,
value: value
}
callback && callback.call(this, result.status, result.value);
return result;
},
remove: function(key, callback) {
var status = this.status.FAILURE,
key = this.getKey(key),
value = null;
try {
value = this.storage.getItem(key);
} catch (e) {
}
if (value) {
try {
this.storage.removeItem(key);
status = this.status.SUCCESS;
} catch (e) {
}
}
callback &&
callback.call(this,
status,
status > 0 ? null : value.slice(value.indexOf(this.timeSign) + this.timeSign.length));
}
}
var ls = new BaseLocalStorage('LS_');
ls.set('a', 'xiao ming', function() { console.log(arguments) });
ls.get('a', function() { console.log(arguments) })
JavaScript设计模式(二十七)【数据访问对象模式】
最新推荐文章于 2025-04-27 20:55:41 发布
本文介绍了一个基于本地存储的数据库封装方案,通过定义BaseLocalStorage类,实现了数据的添加、获取和删除功能,同时支持时间戳控制数据的有效期。该方案利用localStorage进行数据存储,通过预设的前缀和时间戳拼接符,实现数据的有效管理和访问。

1667

被折叠的 条评论
为什么被折叠?



