美文网首页
JS浅克隆和深克隆

JS浅克隆和深克隆

作者: Shadow_4d48 | 来源:发表于2019-07-29 18:04 被阅读0次

浅克隆

function shallowClone(origin, target){
            var target = target||{};//当没有传入target时,创建一个空对象
            for(var prop in origin){
                if(origin.hasOwnProperty(prop)){//判断是不是原型链上的属性
                    target[prop] = origin[prop];
                }
            }
            return target;
        }

深克隆

function deepClone(origin, target){
            var target = target||{},///参数默认值
                toStr = Object.prototype.toString,
                //存储对象的toString方法,以弥补typeof不能区分数组和对象的缺点
                
                arrStr = '[object Array]';
                //数组调用对象的toString方法,返回值就是这个
                //如果是对象,返回值就是[object, object]
            for(var prop in origin){
                if(origin.hasOwnProperty(prop)){//判断是不是原型链上的属性
                    if(origin[prop] !== null && typeof(origin[prop]) == 'object'){
                    //如果这个属性是对象且不是null对象,则执行递归
                        target[prop] = (toStr.call(origin[prop]) == arrStr) ? [] : {};
                        //区分数组和对象,进行创建一个空的容器
                        
                        deepClone(origin[prop], target[prop]);
                    }else{
                        target[prop] = origin[prop];
                    }
                }
            }
            return target;
        }

相关文章

网友评论

      本文标题:JS浅克隆和深克隆

      本文链接:https://www.haomeiwen.com/subject/jarirctx.html