- 数据访问对象模式:抽象和封装一个对象,对数据源进行访问和存储,这样可以方便对数据的管理,以及避免数据之间的重复,覆盖等问题
 
/*   {     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);