【javascript】浅层克隆、深度克隆

1、浅层克隆,  (引用值改变, 两个都一起变)

            var obj = {
                name : 'xiaoming',
                age : 12,
                children : ['mimi','lili','rokey']
            }
            var obj2 = {};
function clone(origin, target) { var target = target || {}; for(var prop in origin) { target[prop] = origin[prop]; } return target; }
clone(obj, obj2);

 

2、深度克隆 (只考虑数组和对象)

    1)判断是不是原始值

 (2)判断是数组还是对象   Object.prototype.toString.call([]) = '[object Array]'    Object.prototype.toString.call({}) = '[object Object]'

   (3)建立相应的数组和对象

   (4)递归

          function deepClone(origin, target) {
                var target = target || {},
                    toStr = Object.prototype.toString,
                    arrStr = '[object Array]';
                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;
            }

 

posted @ 2020-02-08 20:35  shumeihh  阅读(149)  评论(0编辑  收藏  举报