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

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

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

时间: 2024-10-09 21:31:32

封装函数实现存储和读取的功能的相关文章

手动封装OpenCV1.0的IplImage读取保存功能遇到的小问题

最近准备重新学习图像处理的知识,主要目的是自己实现一遍图像处理的算法,所以除了读取.保存图像外的操作都自己写,没想到直接封装OpenCV的读取.保存功能的第一步就出错.关键代码如下 void MyImage::Clear() { if (m_pImg != nullptr) { std::cout << "释放内存" << std::endl; delete m_pImg; m_pImg = nullptr; } } 其中m_pImg是IplImage*类型,析

编译器架构的王者LLVM——(10)变量的存储与读取

LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖 -- 题记 版权声明:本文为 西风逍遥游 原创文章,转载请注明出处 西风世界 http://blog.csdn.net/xfxyy_sxfancy 变量的存储与读取 变量是一款编程语言中的核心,说编译语言是一种符号处理工具,其实是有些道理的.栈式符号表可以方便的记录编译过程中的变量和语法符号,我们上节已经了解了其中的实现方法.那么,还有没有其他的办

在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。

作者:邵盛松 2009-09-05 前言 1关于的BLOB(Binary)数据的存储和读取功能主要参考了MSDN上的一篇<AppendChunk and GetChunk Methods Example (VC++)>,原文地址是http://msdn.microsoft.com/en-us/library/ms807920.aspx.还有www.vckbase.com上有一篇文章<使用ADO实现BLOB数据的存取 -- ADO开发实践之二>,原文地址是http://www.vck

jQuery中对AJAX操作的封装函数

jQuery提供了6个简化AJAX操作的函数,每个都可以代替元素AJAX中的四步代码! (1)$('xxx').load()         jQuery对象函数 (2)$.get()                   jQuery全局函数 (3)$.post()                 jQuery全局函数 (4)$.getScript()          jQuery全局函数 (5)$.getJSON()           jQuery全局函数 (6)$.ajax()     

基于ini配置文件实现多维数组数据的按行存储和读取

需求是为一个多维数组对象的数据按行存储到文件,需要键值对区分层级,对每个对象描述清晰.类似的格式如下: 上图中的数据对应的就是如下的数组(php 语言): $arr = array( '10003' => array( 'id' => 10003, 'tokentime' => 400), '10005' => array( 'id' => 10005, <p> 'cookie' => array(</p> 'num' => 20 ), '

使用SharedPreferences进行数据存储和读取

1.储存 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件或者xml进行保存.如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPre

第110天:Ajax原生js封装函数

一.Ajax的实现主要分为四部分: 1.创建Ajax对象 1 // 创建ajax对象 2 var xhr = null; 3 if(window.XMLHttpRequest){ 4 xhr = new XMLHttpRequest(); 5 } else { 6 //为了兼容IE6 7 xhr = new ActiveXObject('Microsoft.XMLHTTP'); 8 } 2.连接服务器 // 连接服务器open(方法GET/POST,请求地址, 异步传输) xhr.open('G

Python科学计算结果的存储与读取

总结于2019年3月17日  荆楚理工学院 计算机工程学院 一.前言 显然,作为一名工科僧,执行科学计算,需用Python.PS:快忘记Matlab吧.我用了二十年的时间,熟练掌握了Matlab的用法,然后,很可能,我用6个月不到的时间,选择并实现了用Python替换Matlab.虽然来到了计算机工程学院,但是工程计算是本业,不能久,然后我突然间发现,好多时候,只用pyplot显示结果,我们的计算结果,很多时候需要存储和重复调用的哪,一个图的话,若再需要数据,下次需要,难道再发费几小时重新计算?

php基础系列之 数据的存储和读取

·文件处理 ·写入一个文件 1,打开这个文件.如果这个文件不存在,需要先创建它 2,将数据写入这个文件 3,关闭这个文件 ·从一个文件读出数据 1,打开这个文件.如果这个文件不能打开(例如,文件不存在),就应该意识到这一点并且正确退出 2,从这个文件中读出数据 3,关闭这个文件·打开文件 要在php中打开一个文件,可以使用fopen()函数.当打开一个文件的时候,还需要指定如何使用它.也就是文件模式 ·选择文件模式 打开一个文件,有三种选择,只读.只写.或者读和写.函数fopen()支持这三种方