- 数据访问对象模式:抽象和封装一个对象,对数据源进行访问和存储,这样可以方便对数据的管理,以及避免数据之间的重复,覆盖等问题
/* { nameSpace|key: expire|value } */var DataVisitor = function (nameSpace, splitSign) { this.nameSpace = nameSpace; this.splitSign = splitSign || '|';}DataVisitor.prototype = { status: { SUCCESS: 0, FAILURE: 1, OVERFLOW: 2, TIMEOUT: 3 }, getKey: function (key) { return this.nameSpace + this.splitSign + key; }, set: function (key, value, callback, expireTime) { var status = this.status.SUCCESS; key = this.getKey(key); expireTime = expireTime ? expireTime + new Date().getDate() : -1; try { window.localStorage.setItem(key, expireTime + this.splitSign + value); } catch (error) { status = this.status.OVERFLOW; } callback && callback.call(this, status, key, value); return value; }, get: function (key, callback) { key = this.getKey(key); var status = this.status.SUCCESS; var value = window.localStorage.getItem(key); if (value) { var index = value.indexOf(this.splitSign); var time = value.slice(0, index); if (time > new Date().getTime() || time === '-1') { value = value.slice(index + this.splitSign.length); } else { value = null; status = this.status.TIMEOUT; window.localStorage.removeItem(key); } } else { status = this.status.FAILURE; } callback && callback.call(this, status, key, value); return value; }, remove: function (key, callback) { var status = this.status.FAILURE; key = this.getKey(key); value = window.localStorage.getItem(key); if (value) { value = value.slice(value.indexOf(this.splitSign) + this.splitSign.length); window.localStorage.removeItem(key); status = this.status.SUCCESS; } callback && callback.call(this, status, key, value); }}var learnInPro = new DataVisitor('learnInpro');// 操作一learnInPro.set('aaa', '123', function (status, key, value) { console.log(status, key, value);});learnInPro.get('aaa', function(status, key, value) { console.log(status, key, value);})learnInPro.remove('aaa', function(status, key, value) { console.log(status, key, value);});// 操作二learnInPro.set('bbb', '456', function (status, key, value) { console.log(status, key, value);}, 1000 * 2);learnInPro.get('bbb', function (status, key, value) { console.log(status, key, value);});setTimeout(function () { learnInPro.get('bbb', function (status, key, value) { console.log(status, key, value); })}, 1000 * 3);