JS浅克隆和深克隆

浅克隆

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;
        }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容