zoukankan      html  css  js  c++  java
  • localstorage二次封装-模块模式

    var db = function () {
        // 本地存储前缀,减少命名冲突
        var prefix = 'ydb';
        return {
            setPrefix: function (_prefix) {
                prefix = _prefix;
                // 本地存储前缀只允许修改一次,如果多次修改,由于单例,可能会导致只能写入,不能读取
                this.setPrefix = null;
            },
            getPrefix: function () {
                return prefix;
            },
            set: function (key, value, expriess = 0) {
                var o = {
                    value,
                    createTime: Date.now(),
                    expriess
                };
                localStorage.setItem(prefix + '-' + key, JSON.stringify(o));
            },
            get: function (key) {
                var storage = JSON.parse(localStorage.getItem(prefix + '-' + key));
                if (!!storage === false) {
                    return null;
                }
                else {
                    if (storage.expriess <= 0) {
                        return storage.value;
                    }
                    else {
                        if (storage.expriess + storage.createTime > Date.now()) {
                            return storage.value;
                        }
                        // 过期销毁
                        this.remove(key);
                        return null;
                    }
                }
            },
            remove(key) {
                localStorage.removeItem(prefix + '-' + key);
            },
            clear() {
                for (var key in localStorage) {
                    if (key.includes(prefix)) {
                        this.remove(key.split('-')[1]);
                    }
                }
            }
        }
    }()

    这里使用来模块模式隐藏存储前缀,避免开发人员意外修改前缀导致无法读取存储的值。

    定义了get,set,remove,clear四个特权方法,通过它们来操作prefix,隐藏了对prefix的操作细节,这里使用了js中的一个小技巧,用函数表达式来模拟块级作用域,由于这四个函数构成了闭包,外部函数的活动对象,当中包括prefix,添加到了这四个函数的作用链中,所以可以一直使用这个活动对象,即使外部函数执行完成,这个变量prefix也不会被回收。

    别看这个例子很简单,但是里面涉及到的知识点和编程思想还是很多的,望多多思考。

  • 相关阅读:
    系统学习DOM事件机制
    混合编程:域、桥与型变
    分层语言的混合编程
    投资第一定律
    元编程(运行时)模型
    泛型的第一性:同构、集合、抽象
    元编程沉思录
    思想是什么?经过严密的逻辑论证的观点的体系。
    编程语言概念的层次性与解释系统
    元编程沉思录(草稿)
  • 原文地址:https://www.cnblogs.com/jsydb/p/12245238.html
Copyright © 2011-2022 走看看