深复制与浅复制

哪位大神可以简洁明了的说说深复制与浅复制呀?最好有个小例子。感激不尽。

阅读 1.7k
2 个回答

深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。
这是我们之前深拷贝封装的函数,代码如下,浅拷贝就没必要再贴出来吧

function clone(obj) {
/// <summary>
/// 把对象复制,返回
/// </summary>
/// <param name="obj" type="object">源对象</param>
var o;
switch(typeof obj){
    case 'undefined': break;
    case 'string'   : o = obj + '';break;
    case 'number'   : o = obj - 0;break;
    case 'boolean'  : o = obj;break;

    case 'object'   :

        if(obj === null){
            o = null;
        }else{
            if(obj instanceof Array){

                o=[];
                //o= obj.slice(0), 注意了这里不能直接使用这个复制,如果数组中的元素为对象,复制是不成功的
                for(var i=0;i<obj.length;i++)
                {
                    o.push(clone(obj[i]));
                }
            }else{
                o = {};
                for(var k in obj){
                    o[k] = clone(obj[k]);
                }
            }
        }
        break;
    default:
        o = obj;break;
}
return o;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题