码迷,mamicode.com
首页 > Web开发 > 详细

实现JS对象深复制的简单方案

时间:2015-08-07 09:20:46      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

前段时间开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和数组的处理,这里面用到了递归。

实现JS对象深复制的简单方案

标签:

原文地址:http://www.cnblogs.com/hebutyll/p/4709765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!