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}

一只斗牛犬
TA貢獻1784條經驗 獲得超2個贊
看 MDN
針對深拷貝,需要使用其他方法,因為 Object.assign()拷貝的是屬性值。假如源對象的屬性值是一個指向對象的引用,它也只拷貝那個引用值。
如果目標對象中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。后來的源的屬性將類似地覆蓋早先的屬性。
所以 它可以做三件事
淺一層的深拷貝
合并對象
合并具有相同屬性的值
添加回答
舉報
0/150
提交
取消