• JS —— 深度克隆


         // 深度克隆
            // 将obj的属性克隆到obj1上面。
            // 在obj1上面添加属性不影响obj上面的属性
            var obj = {
                name: "abc",
                age: 9,
                sex: "female",
                card: ['visa', 'master'],
                wife: {
                    name: "bcd",
                    son: {
                        name: "bcd",
                        son: "xx"
                    }
                }
            }
            var obj1 = {}
    
            function deepClone(origin, target) { // 传入参数
                var target = target || {}, // 防止没有写接收克隆的目标,所以兼容一下,如果没有就用空对象去接收
                    toStr = Object.prototype.toString, // 把原型上的toString付给toStr
                    arrStr = "[object Array]"; //toString为数组的判断结果
                for (var prop in origin) { //循环起源对象
                    if (origin.hasOwnProperty(prop)) { //不拿原型上的东西,如果有原型上的属性就不进入判断
                        if (origin[prop] !== "null" && typeof (origin[prop]) == 'object') { //不拿起源对象上面为空的值,拿原始值
                            if (toStr.call(origin[prop]) == arrStr) { //为数组否则为对象
                                target[prop] = []; //创建空数组接收
                            } else {                                  //为对象
                                target[prop] = {}; //创建空对象接收
                            }
                            deepClone(origin[prop], target[prop]); //执行递归,进入第二层重复判断这整个流程
    
                        } else {
                            target[prop] = origin[prop]; //如果是应用值直接付给目标
                        }
                    }
                }
                return target; //防止没写接收的目标,返回克隆完成后的目标
            }
            deepClone(obj, obj1);
  • 相关阅读:
    复利计算单元测试-软件工程
    实验一 操作系统
    <构建之法>前三章读后感—软件工程
    复利计算总结-软件工程
    实验0-操作系统
    复利计算1.0~2.0~3.0~4.0-软件工程(网页版)
    典型用户与场景
    0608场景(用户故事) 任务
    构建之法读后感+学习和诚信
    0603团队变化+sprint第二个冲刺
  • 原文地址:https://www.cnblogs.com/yangpeixian/p/11519318.html
Copyright © 2020-2023  润新知