鍍金池/ 問(wèn)答/HTML/ Object.assign

Object.assign

handleCancel (val) {
      Object.assign(this.modalFormData, val)
      // this.modalFormData = val
    }

請(qǐng)問(wèn)下vue里面這兩種賦值有區(qū)別嗎?
下面那么寫(xiě)就有問(wèn)題,也有可能是其他地方影響了,但是上面那樣寫(xiě)就對(duì)了,是為什么勒?

回答
編輯回答
你好胸

Object.assign的目的是將 val中的所有屬性復(fù)制給 this.modalFormData, 不等同于將val整個(gè)賦值給this.modalFormData。
舉例,請(qǐng)自行對(duì)比

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年7月25日 04:03
編輯回答
貓館

淺復(fù)制zsbd

2018年1月26日 17:41
編輯回答
舊時(shí)光

看 MDN

  1. 針對(duì)深拷貝,需要使用其他方法,因?yàn)?Object.assign()拷貝的是屬性值。假如源對(duì)象的屬性值是一個(gè)指向?qū)ο蟮囊?,它也只拷貝那個(gè)引用值。
  2. 如果目標(biāo)對(duì)象中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。后來(lái)的源的屬性將類似地覆蓋早先的屬性。

所以 它可以做三件事

  1. 淺一層的深拷貝
  2. 合并對(duì)象
  3. 合并具有相同屬性的值
2018年7月27日 02:41