• 数据访问对象模式:抽象和封装一个对象,对数据源进行访问和存储,这样可以方便对数据的管理,以及避免数据之间的重复,覆盖等问题
    1. /*
    2. {
    3. nameSpace|key: expire|value
    4. }
    5. */
    6. var DataVisitor = function (nameSpace, splitSign) {
    7. this.nameSpace = nameSpace;
    8. this.splitSign = splitSign || '|';
    9. }
    10. DataVisitor.prototype = {
    11. status: {
    12. SUCCESS: 0,
    13. FAILURE: 1,
    14. OVERFLOW: 2,
    15. TIMEOUT: 3
    16. },
    17. getKey: function (key) {
    18. return this.nameSpace + this.splitSign + key;
    19. },
    20. set: function (key, value, callback, expireTime) {
    21. var status = this.status.SUCCESS;
    22. key = this.getKey(key);
    23. expireTime = expireTime ? expireTime + new Date().getDate() : -1;
    24. try {
    25. window.localStorage.setItem(key, expireTime + this.splitSign + value);
    26. } catch (error) {
    27. status = this.status.OVERFLOW;
    28. }
    29. callback && callback.call(this, status, key, value);
    30. return value;
    31. },
    32. get: function (key, callback) {
    33. key = this.getKey(key);
    34. var status = this.status.SUCCESS;
    35. var value = window.localStorage.getItem(key);
    36. if (value) {
    37. var index = value.indexOf(this.splitSign);
    38. var time = value.slice(0, index);
    39. if (time > new Date().getTime() || time === '-1') {
    40. value = value.slice(index + this.splitSign.length);
    41. } else {
    42. value = null;
    43. status = this.status.TIMEOUT;
    44. window.localStorage.removeItem(key);
    45. }
    46. } else {
    47. status = this.status.FAILURE;
    48. }
    49. callback && callback.call(this, status, key, value);
    50. return value;
    51. },
    52. remove: function (key, callback) {
    53. var status = this.status.FAILURE;
    54. key = this.getKey(key);
    55. value = window.localStorage.getItem(key);
    56. if (value) {
    57. value = value.slice(value.indexOf(this.splitSign) + this.splitSign.length);
    58. window.localStorage.removeItem(key);
    59. status = this.status.SUCCESS;
    60. }
    61. callback && callback.call(this, status, key, value);
    62. }
    63. }
    64. var learnInPro = new DataVisitor('learnInpro');
    65. // 操作一
    66. learnInPro.set('aaa', '123', function (status, key, value) {
    67. console.log(status, key, value);
    68. });
    69. learnInPro.get('aaa', function(status, key, value) {
    70. console.log(status, key, value);
    71. })
    72. learnInPro.remove('aaa', function(status, key, value) {
    73. console.log(status, key, value);
    74. });
    75. // 操作二
    76. learnInPro.set('bbb', '456', function (status, key, value) {
    77. console.log(status, key, value);
    78. }, 1000 * 2);
    79. learnInPro.get('bbb', function (status, key, value) {
    80. console.log(status, key, value);
    81. });
    82. setTimeout(function () {
    83. learnInPro.get('bbb', function (status, key, value) {
    84. console.log(status, key, value);
    85. })
    86. }, 1000 * 3);