深度克隆

参考文章 http://www.cnblogs.com/jq-melody/p/4499333.html

    http://www.jianshu.com/p/afc55e33a36a

记下自己的理解:

克隆:即把一个对象的所有属性和方法一模一样地复制到一个对象中。

而深度克隆多做了一件事,把这两个对象放在不同内存的地方。即修改其中一个不影响另外一个。

浅克隆,不必多说,他只做了克隆的事情,单纯使用"="去实现。

深克隆:(总结两篇文章后的结果)

 1 /**
 2  * Created by Administrator on 2016/12/11.
 3  */
 4 (function () {
 5 
 6     function deepClone(oldObj,newObj) {
 7         var newObj = newObj || {};
 8         for (var i in oldObj) {
 9             if (typeof oldObj[i] == "object") {
10                 newObj[i]=(oldObj[i].constructor==Array)?[]:{};
11                 arguments.callee(oldObj[i],newObj[i]);
12             }else {
13                 newObj[i]=oldObj[i];
14             }
15         }
16         return newObj;
17     }
18 
19     var user={
20         name:"晨落梦公子",
21         tag:["html","css","js"]
22     };
23     
24     var meng=deepClone(user);
25     console.log(meng.tag);
26     meng.tag.push("java");
27     console.log(meng.tag);
28     var xu=deepClone(user);
29     console.log(xu.tag);
30 })();

这段话说的很好

补充一个知识点,值传递和引用传递

值传递:改变子类不影响父类,即开辟了新的内存

引用传递:改变子类影响父类,即公用同一块内存

posted @ 2016-12-11 20:54  晨落梦公子  阅读(344)  评论(0编辑  收藏  举报