码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-07 16:30:36      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:code   个数   eof   nts   生成   功能   nbsp   turn   变量   

需求: 在全局中只有一个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‘));

 

 

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

标签:code   个数   eof   nts   生成   功能   nbsp   turn   变量   

原文地址:https://www.cnblogs.com/yess/p/12161760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!