封装函数实现存储和读取的功能

Posted yess

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装函数实现存储和读取的功能相关的知识,希望对你有一定的参考价值。

需求: 在全局中只有一个namespace函数, 
        可以实现两种功能, 一种是存储数据,另一种是读取数据
        存储数据的时候: namespace(‘a.b.c‘, 123);
        读取数据的时候: namespace(‘a.b.c‘) => 123
        读取: namespace(‘a.b‘) => {c: 123}
        读取: namespace(‘a‘) => {b: {c: 123}}
        a:{
            b: {
                c: 123
            }
        }
该函数可以实现两种功能:
    第一种是可以存储数据: 当存储数据的时候需要接收两个参数,第一个参数是存储的路径,第二个参数存储的数据
    第二种是可以读取数据: 当读取数据的时候,需要接收一个参数就是要读取的路径 
    var namespace = (function() {
        // 数据存储和读取的对象
        var obj = {};

        return function(path, val) {
            // 模拟函数的重载
            if(arguments.length == 2) { //实参个数为2 则为存储数据
                // 划分路径
                var pathArr = path.split(‘.‘);
                // 引用obj变量
                var obj1 = obj;
                // 设置最后的键
                var index = pathArr.pop();
                // 循环产生对象
                for(var i = 0;i < pathArr.length; i++) {
                    var value = pathArr[i];
                    // 判断
                    if(obj1[value] === undefined) {
                        // 生成一个对象
                        obj1[value] = {};
                        // 将obj1指向新生成的对象
                        obj1 = obj1[value];
                    }else if(typeof obj1[value] === ‘object‘ && obj1[value] !== null) {
                        // 将obj1指向新生成的对象
                        obj1 = obj1[value];
                    }else {
                        // obj1有值,但不是一个对象
                        console.log(‘已经有值‘);
                        return;
                    }
                }
                // 进行赋值操作
                obj1[index] = val;
                console.log(obj);
            }else if(arguments.length == 1) { // 实参个数为1 则为读取数据
                // 划分路径
                var pathArr = path.split(‘.‘);
                // 引用obj变量
                var obj1 = obj;
                // 设置最后的键
                var index = pathArr.pop();
                // 循环读取对象
                for(var i = 0; i < pathArr.length; i++) {
                    var value = pathArr[i];
                    obj1 = obj1[value];
                    if(!(typeof obj1 === ‘object‘ && obj1 !== null)) {
                        console.log(‘读取路径不对‘);
                        return;
                    }
                }
                // 返回对象的值
                return obj1[index];
            }
        }
    })();
    namespace(‘a.b.c‘, 111);
    console.log(namespace(‘a.b.c‘));

 

 

以上是关于封装函数实现存储和读取的功能的主要内容,如果未能解决你的问题,请参考以下文章

Java 封装

Java 封装

Java 封装

Java 封装

Java 封装

Java封装