JavaScript 对于深度克隆的函数

JS的深度克隆函数

当项目需要用到一个已知对象内容,但是两个对象之间不能存在联系,
就是说不能是传统的把一个对象的引用赋值给另外一个对象。这样会造成
一个对象改变内容另一个对象也会随之改变。
这时候就需要克隆对象的技术了。

     克隆对象函数的步骤:
         1、遍历被克隆对象 for(var prop in obj)
         2、判断prop 是不是引用值 typeof() object
              是:直接克隆原始值
                       克隆变量 = 被克隆变量
              否:判断是否为数组或者对象 instanceof、toString、constructor
                   是数组:建立相应数组
                   是对象:建立相应对象
       	 3、递归函数
         4、return 克隆值
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>深度克隆函数</title>
</head>
<body>
    <script>

        //建立一个被克隆对象
        var obj = {
            name : "张三",
            age : 18,
            sex : "男",
            arr : [1, 2, 'a', 'b','abc'],
            stu : {
                name : "李四",
                age : 20,
                arr : [1, 2, 'a', 'b','abc'],
                sex : "人妖"
            },
            tea : {
                name : "王五",
                age : 33,
                son : {
                    name : "赵六",
                    age : 15,
                    arr : [1, 2, 'a', 'b','abc'],
                    sex : "女"
                }
            },
            sex : "男"
        }

        var obj02 = {

        }

        function deepClone(clone, isClone) {
            var clone = clone || {},
                toStr = Object.prototype.toString(),
                arrStr = "[object Array]";
            //遍历被克隆对象 for(var prop in isClone)
            for(var prop in isClone){
                //判断是不是自己的原型
                if(isClone.hasOwnProperty(prop)){
                    //判断prop 是不是原始值 typeof() object
                    if(isClone !== null && typeof(isClone[prop]) == "object"){
                        //判断是否为数组或者对象 instanceof、toString、constructor
                        if(isClone[prop] instanceof Array){
                            //是数组:建立相应数组
                            clone[prop] = [];
                        } else{
                            //是对象:建立相应对象
                            clone[prop] = {};
                        }
                        //递归函数
                        deepClone(clone[prop],isClone[prop]);
                    } else {
                        //直接克隆原始值
                        clone[prop] = isClone[prop];
                    }
                }
            }
            return clone;
        }



    </script>
</body>
</html>

这是本人在学习JavaScript 过程种学习到的知识,希望能帮到大家

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值