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

深拷贝

时间:2020-05-08 20:01:10      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:www   console   ===   name   href   bre   type   ret   class   

         function _type(value) {
            return Object.prototype.toString.call(value);
        }

        function _deepClone(obj) {
            // 如果是null直接返回null
            if (obj === null) return null;
            // 如果是基本数据值或者函数,也直接返回即可(函数无需克隆处理)
            if (typeof obj !== object) return obj;
            // 如果是正则
            if (_type(obj) === [object RegExp]) return new RegExp(obj);
            // 如果是日期格式的数据
            if (_type(obj) === [object Date]) return new Date(obj);

            // obj.constructor:找到的是所属类原型上的constructor,而原型上的constructor指向的是当前类本身 =>保证传递进来什么类型的值,我们最后创建的newObj也是对应类型的
            // obj.constructor === > constructor  ====>  类
            let newObj = new obj.constructor;
            for (let key in obj) {
                if (!obj.hasOwnProperty(key)) break;
                // 如果某一项的值是引用值吗,我们还需要进一步迭代循环,把引用值中的每一项也进一步克隆 =>深度克隆
                newObj[key] = _deepClone(obj[key]);
            }
            return newObj;
        }

        let arr1 = [10, 20, {
            name: zxw
        }, /^\d+$/, function () {}];
        let arr2 = _deepClone(arr1);
        console.log(arr2);

        let obj1 = {
            name: zxw,
            ke: [node, vue, react],
            teacher: {
                n: ‘jack,
                m: ‘mike
            }
        };
        let obj2 = _deepClone(obj1);
        console.log(obj2);
Object.prototype.toString.call(value) 可以用来 判断数据类型   链接: https://www.cnblogs.com/cn-chy-com/p/11524980.html

深拷贝

标签:www   console   ===   name   href   bre   type   ret   class   

原文地址:https://www.cnblogs.com/guangzhou11/p/12852627.html

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