Object.assign()
1. Object.assign可以实现对象的合并,或者说把src对象的可枚举属性添加到dest对象上,返回dest对象. 实际上是调用src的getter以及dest的setter函数实现的.
2. Object.assign(dest, ...srcs) src参数可以有一个,也可以有多个,如果多个src对象有相同属性名,那么以最后一个属性值为最终传到dest对象中的值.
问题:Object.assign是浅拷贝还是深拷贝?
解答:因为此方法复制的是src的属性值,那么当src属性值是简单数据类型时,是深拷贝【深拷贝,一方变化另一方不会变化】,
如果src属性是引用数据类型时,是浅拷贝【一方变化会影响另一方的值】
let src = { name: 'James' }; let dest = { age: '19' }; let src_1 = { name: 'Marry' }; Object.assign(dest, src, src_1); console.log(dest); console.log(src_1); src_1.name = 'hello'; console.log(src_1); console.log(dest);
console结果依次为:【深拷贝】
{age: '19', name: 'Marry'}
{name: 'Marry'} name: "hello"[[Prototype]]: Object
{name: 'hello'}
{age: '19', name: 'Marry'}
3. 不能在两个对象之间转移获取函数和设置函数【setter 和 getter】
4. 转载:
【1】补充:Object.assign不会在那些源对象值为null或undefined的时候抛出错误
【2】由于Object.assign()有上述特性,所以我们在Vue中可以这样使用:Vue组件可能会有这样的需求:在某种情况下,需要重置Vue组件的data数据。此时,我们可以通过this.$data获取当前状态下的data,通过this.$options.data()获取组件初始状态下的data。然后只要使用Object.assign(this.$data, this.$options.data())就可以将当前状态的data重置为初始状态,非常方便
————————————————
版权声明:本文为CSDN博主「你好像很好吃a」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44296929/article/details/103879019

浙公网安备 33010602011771号