码迷,mamicode.com
首页 > 其他好文 > 详细

谈谈深浅拷贝的问题(2)

时间:2017-09-03 12:15:32      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:console   复制   osi   广州   变换   var   操作   ret   blank   

连接上一章节,点击这里查看

第一次的直接复制,第二次的函数调用,我们都只是完成了浅拷贝,只有第三次的函数实现了深拷贝

 var obj1 = {
      age: 18,
      position: ["北京", "广州", "上海"],
      name: {
          first: {
              a: 1,
              b: 2
          },
          last: "lucy"
      }
 }
var obj2 = obj1; //直接赋值 obj2.name = { first: "mark", last: "lucy" } console.log(obj1.name) //{first: "mark", last: "lucy"} console.log(obj2.name) //{first: "mark", last: "lucy"}

再来测试一下

obj2.position=["北京"]
console.log(obj1.position)   //["北京"]
console.log(obj2.position)   //["北京"]

可以看出来,只要其中一个变换了,另外一个也是跟着变化的。再来看看第二个函数

 function copy(obj) {    
     var res = {}    
     for (var i in obj) { 
         if (obj.hasOwnProperty(i)) { 
             res[i] = obj[i] 
         }  
     }    
     return res
 }
 var obj1 = {
     age: 18,
     position: ["北京", "广州", "上海"],
     name: {
         first: {
             a: 1,
             b: 2
         },
         last: "lucy"
     }
 }
 var obj2 = copy(obj1)

var obj2 = copy(obj1)
obj2.name={ss:"333"}
console.log(obj1.name)  //{first: Object, last: "lucy"}
console.log(obj2.name)  // {ss: "333"}

在obj2中,将obj2.name={ss:"333"},打印出来可以看到  obj1.name 保持不变,obj2.name发生了变化,还有与此类似的操作

 obj2.position=["北京"]
 console.log(obj1.position)  //["北京", "广州", "上海"]
 console.log(obj2.position)  //["北京"]

但是当你这样子做的时候,是发生变化了的

obj2.position[0]="湖南"
console.log(obj1.position)   //["湖南", "广州", "上海"]
console.log(obj2.position)   //["湖南", "广州", "上海"]

谈谈深浅拷贝的问题(2)

标签:console   复制   osi   广州   变换   var   操作   ret   blank   

原文地址:http://www.cnblogs.com/yiyistar/p/7469116.html

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