浅拷贝的三种实现方式

Z, ZLW 898

浅拷贝的三种实现方式:1、ES6的方法;2、使用  for  in 循环;3、$.extend()。当一个对象拷贝另一个对象的数据的时候,只要一个对象的数据发生改变另一个对象的数据也会发生改变。因为浅拷贝拷贝的是引用的地址,(所以必须在对象是多层才能拷贝,单层拷贝的是数值,多层说明里面套着对象,所以拷贝的是地址。)

1、ES6的方法

Object.assign()  作用:将第二个参数及以后的参数合并到第一个对象里。

参数1:target

参数2:对象……

参数3:对象….

例: 

     var obj = {a:{name:”kaiqin”,age:19}};

     var obj1 = Object.assign({},obj);

     obj1.a.name=”wang”

     console.log(obj1)

     console.log(obj)

2、使用  for  in 循环

遍历每一个属性,将他们赋值给新的对象。        要求对象必须是多层的状态下才能实现浅拷贝

var obj = { a: {name:”kaiqin”,age:19 } } ;

var obj2 = {a:1,b:2,c:3};

//多层

function copy(obj){

      var newObj = {};

      for(var key in obj){

            newObj[key] = obj[key];

       }

return newObj;

}

//单层

var obj1 = copy(obj);

obj1.a.name=”wang”

console.log(obj1)

console.log(obj)

3、$.extend()

      除了可以给jquery对象扩展方法外还可以实现深浅拷贝

      1、布尔值 如果填true的情况下是深考贝 什么也不写就是浅拷贝

      2、目标对象

      3……后面所有的对象 都是需要合并的对象

var obj = {a:{name:”kaiqin”,age:19}};

var obj1 = {b:{name:”wang”,age:19}};

var obj2 = $.extend({},obj,obj1)

obj2.a.name=”zhang”;

console.log(obj2)

console.log(obj)

3、$.extend()

      除了可以给jquery对象扩展方法外还可以实现深浅拷贝

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部