ES6中的浅复制--Objeck.assign()

ES6对象提供了 Object.assign() 这个方法来实现浅复制。

使用assign主要是为了简化对象的混入。混入是指的在一个对象中引用另一个对象的属性或方法。

assing可以把一个对象的属性和方法完整的转copy到另外一个对象中。
在es5中复制一个对象,需要很长的一段代码,而es6完全解决了这个问题:

var p = {
        name : "lisi",
        age : 20,
        friends : ['张三', '李四']
    }
    var p1 = {};
    Object.assign(p1, p); //则p1中就有了与p相同的属性和方法.  p1是接受者,p是提供者
    console.log(p1);
    //这种copy是浅copy,也就是说如果属性值是对象的话,只是copy的对象的地址值(引用)
    console.log(p1.friends == p.friends);  //true   p1和p的friends同事指向了同一个数组。
    p.friends.push("王五");
    console.log(p1.friends); //['张三', '李四', '王五']

在这里插入图片描述
由此可以看出,复制的对象与被复制的对象是同步的,不管你修改的是复制的对象还是被复制对象的值,都是同步体现的!当然添加属性的时候也是适用的!

assign方法可以接受任意多的提供者。意味着后面提供者的同名属性和覆盖前面提供者的属性值。

 var p = {
        name : "lisi",
        age : 20,
        friends : ['张三', '李四']
    }
    var p1 = {
        name : 'zs',
    }
    var p2 = {};
    Object.assign(p2, p, p1); //p和p1都是提供者
    console.log(p2.name); // zs

在这里插入图片描述
通过上面的代码可以看出,当出现多个参数的时候,后面提供者的同名属性和覆盖前面提供者的属性值。(覆盖的作用)

还有一种情况,如下:

var p = {
        name : "lisi",
        age : 20,
        friends : ['张三', '李四']
    }
    var p1 = {
        age1 : 30,
    };
    Object.assign(p1, p); 
    console.log(p1);


则p1中就有了与p相同的属性和方法. p1是接受者,p是提供者
这种copy是浅copy,也就是说如果属性值是对象的话,只是copy的对象的地址值(引用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值