结构-行为-样式-Javascript 深度克隆函数(转)

突然想到有一回面试的时候有一个问题一直挂在心头,于是乎在网上找了找,这个比较好:

 

//深度克隆
        function deepClone(obj) {
            var result, oClass = isClass(obj);
            //确定result的类型
            if (oClass === "Object") {
                result = {};
            }else if (oClass === "Array") {
                result = [];
            }else {
                return obj;
            }
            for (key in obj) {
                var copy = obj[key];
                if (isClass(copy) == "Object") {
                    result[key] = arguments.callee(copy); //递归调用
                }
                else if (isClass(copy) == "Array") {
                    result[key] = arguments.callee(copy);
                }
                else {
                    result[key] = obj[key];
                }
            }
            return result;
        }
        //返回传递给他的任意对象的类
        function isClass(o) {
            if (o === null) return "Null";
            if (o === undefined) return "Undefined";
            //从第九位开始截取
            return Object.prototype.toString.call(o).slice(8, -1);
        }
        var oPerson = {
            oName: "rookiebob",
            oAge: "18", 
            oAddress: {province: "beijing"}, 
            ofavorite: ["swimming", {reading: "history book"}], 
            skill: function () {console.log("bob is coding");}
        };
        //深度克隆一个对象
        var oNew = deepClone(oPerson);
        console.log(oNew);

 

本代码转自:深度克隆函数

 

转载于:https://www.cnblogs.com/ChickenTang/p/5849796.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值