码迷,mamicode.com
首页 > 编程语言 > 详细

javascript 对象深拷贝

时间:2014-06-15 17:31:56      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   ext   

javascript  中对象深拷贝

在看到jq.extend 时发现javascript 中的深拷贝,一直没有详细了解深拷贝怎么实现的。

 1     var isType = function(obj, type){
 2         var toString = Object.prototype.toString, undefined;
 3         return    (obj === null && type === "Null") || (obj === undefined && type ==="Undefined") || 
 4         ( toString.call(obj).slice(8,-1) === type);  
 5     };
 6 //类型判断,如果是对象,或者是数组 toString 返回的是[object Object] [object Array]
 7     
 8     var deepCopy = function(result, source){
 9         for(var key in source){
10 
11             var copy = source[key];
12             if(source === source[key]) continue;  //如window.window === window这种情况
13             if(isType(copy,"Object")){// copy Object
14                 result[key] = arguments.callee(result[key] || {}, copy);
15             }else if(isType(copy, "Array")){// copy Array
16                 result[key] = arguments.callee(result[key] || [], copy);
17             }else{// 字符串,数字等
18                 result[key] = copy;
19             }
20         }
21         return result;
22     };
23 
24     var original = {
25         memNum:1,
26         memStr:"this is a string",
27         memObj:{
28             test1: "object in object"
29         },
30         memArr:[
31             "this is another string",
32             {
33                 test2:" object in array"
34             }
35         ]
36     };
37 
38     var copy = deepCopy({},original);
39     copy.memObj.test1="object in copy object";
40 
41     console.log(original.memObj.test1);  //object in object 
42     console.log(copy.memObj.test1);        //object in copy object 
43 //从这里看出,深拷贝了对象original ,在改变新对象的属性时,原对象的属性未受到影响        

实现关键:如果对象的某一个属性是对象或者数组,那么要递归拷贝一遍,直到最终属性为string ,number。 这样在改变新对象上的属性就不会影响到原对象。

javascript 对象深拷贝,布布扣,bubuko.com

javascript 对象深拷贝

标签:style   class   blog   code   java   ext   

原文地址:http://www.cnblogs.com/su27ubk/p/3785719.html

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