zoukankan      html  css  js  c++  java
  • 封装函数实现存储和读取的功能

    需求: 在全局中只有一个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'));
  • 相关阅读:
    理解BSTR数据类型 神奇的BSTR
    char *
    _variant_t和_bstr_t
    数据库中创建表(包括创建主键,外键,非空列,唯一)
    使用ADO实现BLOB数据的存取 -- ADO开发实践之二
    sql server 2005 修改动态端口,连接字符串为:需要改成:IP地址+逗号+端口号才行
    Bilateral Filtering(双边滤波) for SSAO
    关于在Arduino中调用DS1302模块
    关于电机驱动扩展板 L293D 马达板Arduino
    Arduino教程资料汇总(8月22日悄悄跟新了一下)
  • 原文地址:https://www.cnblogs.com/yess/p/12161760.html
Copyright © 2011-2022 走看看