JavaScript_物件傳參考特性

定義

  • 傳值(Call by value):在 JavaScript 中的純值 是傳值。(傳過去以後就沒有任何關聯性)
  • 傳參考/傳參照(Call by reference):傳遞給函式的是它實際參數的隱式參照,而不是實際的拷貝。
  • 傳共用物件(Call by sharing): a 與 b 是共用同一個物件內容,若 b 修改了物件內容,則 a 也會被修改成同樣內容(物件是共用的,沒有拷貝)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 傳值
var person = '小明'; // 純值
var person2 = person;
person2 = '杰倫';
console.log(perosn, person2)
// 小明,杰倫
//傳參考
var person = {
name: '小明'
};
var person2 = person;
perosn2.name = '杰倫'; // 改變物件內容
console.log(perosn, person2);
console.log(perosn === person2);
// 杰倫,杰倫
// true

More info: 傳值、傳參考

應對方式:Object.assign

操作測試

1
2
3
4
5
 openModal(item){

//this.tempProduct= item; //因為物件傳參考的特性,直接用item會與tmepProduct相同
this.tempProduct= Object.assign({},item); //可採用es6語法,將item傳自獨立的空物件裡,才不會互相渲染
},

無法直接指定匯入變數中,因傳參考的特性會互相渲染,需將item傳入空物件裡才能順利使用。