为了账号安全,请及时绑定邮箱和手机立即绑定

Object.assign

Object.assign

胡子哥哥 2018-08-18 16:23:04
handleCancel (val) {       Object.assign(this.modalFormData, val)      // this.modalFormData = val     }请问下vue里面这两种赋值有区别吗?下面那么写就有问题,也有可能是其他地方影响了,但是上面那样写就对了,是为什么勒?
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

Object.assign的目的是将 val中的所有属性复制给 this.modalFormData, 不等同于将val整个赋值给this.modalFormData。
举例,请自行对比

var modalFormData = {x:1};var val = {y:2};var newModal = Object.assign(modalFormData, val);console.log(newModal);   // {x:1, y:2}

var modalFormData = {x:1};var val = {y:2};
modalFormData = val;console.log(modalFormData);   // {y:2}


查看完整回答
反对 回复 2018-08-19
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

看 MDN

  1. 针对深拷贝,需要使用其他方法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。

  2. 如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。

所以 它可以做三件事

  1. 浅一层的深拷贝

  2. 合并对象

  3. 合并具有相同属性的值


查看完整回答
反对 回复 2018-08-19
  • 2 回答
  • 0 关注
  • 866 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信