深度克隆
参考文章 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 })();
这段话说的很好
补充一个知识点,值传递和引用传递
值传递:改变子类不影响父类,即开辟了新的内存
引用传递:改变子类影响父类,即公用同一块内存
myGitgub https://github.com/mfx55
希望我的博客能帮到你