标签:
前段时间开jQuery源代码的时候,正好看到jQuery.extend的实现方案,忽然想到对象的深复制和浅表复制的问题。
因为引用类型对象的存在,所以简单的使用"="只能实现引用关系的复制,所以当其中一个引用指向的变量发生变化的时候,相应的另外一个引用也会发生变化。
所以很多时候也称这种复制为浅表复制。那么如何才能实现对象的深复制呢?以下是实现深复制的简单实现代码,仅供参考。
1 function copyObject(target){ 2 return _copy(target); 3 4 function _copy(target){ 5 if(typeof(target) == ‘function‘){ //处理函数的情况 6 return target; 7 } else if( target == null){ 8 return target; 9 } else if( typeof(target) == ‘object‘){ 10 var tmp; 11 if(checkIsArray(target)){ // 数组 12 tmp = []; 13 for(var i = 0, length = target.length; i < length; i++){ 14 tmp.push(_copy(target[i])); 15 } 16 return tmp; 17 }else{ //对象 18 tmp = {}; 19 for(var key in target){ 20 tmp[key] = _copy(target[key]); 21 } 22 return tmp; 23 } 24 }else{ 25 return target; 26 } 27 } 28 29 function checkIsArray(target){ 30 return Object.prototype.toString.call(target) === ‘[object Array]‘; 31 } 32 }
其实对于值类型,没有什么需要难处。主要是针对普通的object和数组的处理,这里面用到了递归。
标签:
原文地址:http://www.cnblogs.com/hebutyll/p/4709765.html