---
tags: JavaScript 實戰班, Day9
---
# 設計魔劍三組
## 6/18:Day 9
漂亮阿姨收到轉帳資料後並不清楚是小明所轉帳的,除了對於來路不明的費用感到困擾,也想找出究竟是誰匯款給她,因此報警處理此事件。
小明在家中準備打電話跟漂亮阿姨說明此事時,門外卻來了正準備打聽「漂亮阿姨不明款項案件」的警察...。
警察:「請問小明先生在家嗎?」
小明:「我是小明」
警察:「漂亮阿姨最近有不明的款項,請問你知道是誰匯的呢?」
小明一心想要親自告訴漂亮阿姨,因此沒有承認卻激動的回覆:「不明款項!?那才不是不明款項勒!!」
警察:「為什麼你一口咬定不是不明款項呢?」
小明:「說不是就不是!」
警察:「看來你最可疑,搜!」
心想不妙的小明,一定要避免這件事情曝光,但匯款紀錄就在家中遲早會被搜出,請協助小明度過這次難關。
物件、陣列有傳遞參考的特性,因此兩個相同參考的物件、陣列最後比對時會完全相等,請查看影音課程中的「物件的參考特性」相關章節解決此問題:
### 任務
- 僅能調整 `var MingMoneyTransferRecord = ...` 後方的賦予方法,使兩個變數的參考不同
- 使最後的 `MingMoneyTransferRecord === Auntie.depositRecord` 的結果為 false
- `MingMoneyTransferRecord` 格式必須不變
### 挑戰項目:
- 組員間的方法盡可能都不同
```js
var Auntie = {
name: '漂亮阿姨',
age: 21,
deposit: 10000,
depositRecord: [
{
title: '小明匯款紀錄',
amounts: 77777
}
]
};
var MingMoneyTransferRecord = Auntie.depositRecord;
console.log(MingMoneyTransferRecord);
console.log(MingMoneyTransferRecord === Auntie.depositRecord);
```
重點觀念:
- 物件參考觀念
- 物件解除參考運用
---
## Ryan
```javascript=
var Auntie = {
name: '漂亮阿姨',
age: 21,
deposit: 10000,
depositRecord: [
{
title: '小明匯款紀錄',
amounts: 77777
}
]
};
var MingMoneyTransferRecord = Object.assign({}, Auntie);
console.log(MingMoneyTransferRecord);
console.log(MingMoneyTransferRecord === Auntie.depositRecord);
```
> 助教回覆:作業做的不錯喔 :+1:
有正確複製 Auntie 物件,不過本次作業,
可以嘗試 JSON 這個方法喔,卡斯伯老師有公告:資料結構要相同,但是"參考"要不同 ~
因為 JSON 是直接轉字串再轉回物件,因此記憶體指向不同,
所以使用 JSON 複製出來的物件和原本物件 "參考" 是不同的,如下面範例。
https://codepen.io/Isshin/pen/gOPgWKB?editors=1111
---
## Vivian Chiang
```javascript=
var Auntie = {
name: '漂亮阿姨',
age: 21,
deposit: 10000,
depositRecord: [
{
title: '小明匯款紀錄',
amounts: 77777
}
]
};
// var MingMoneyTransferRecord = Auntie.depositRecord;
var MingMoneyTransferRecord = JSON.parse(JSON.stringify(Auntie.depositRecord));
console.log(MingMoneyTransferRecord);
console.log(MingMoneyTransferRecord === Auntie.depositRecord);
```
> 助教回覆:作業做的很好哦,很正確唷 :+1:
---
## Yoyo
```javascript=
var Auntie = {
name: '漂亮阿姨',
age: 21,
deposit: 10000,
depositRecord: [
{
title: '小明匯款紀錄',
amounts: 77777
}
]
};
var MingMoneyTransferRecord = [...Auntie.depositRecord]
console.log(MingMoneyTransferRecord);
console.log(MingMoneyTransferRecord === Auntie.depositRecord);
```
> 助教回覆:作業做的不錯喔 :+1:
有正確複製 Auntie.depositRecord 物件,不過本次作業,
可以嘗試 JSON 這個方法喔,卡斯伯老師有公告:"資料結構"要相同,但是"參考"要不同 ~
因為 JSON 是直接轉字串再轉回物件,因此記憶體指向不同,
所以使用 JSON 複製出來的物件和原本物件 "參考" 是不同的,如下面範例。
https://codepen.io/Isshin/pen/gOPgWKB?editors=1111
---
## ClareDes.
```javascript=
var Auntie = {
name: '漂亮阿姨',
age: 21,
deposit: 10000,
depositRecord: [
{
title: '小明匯款紀錄',
amounts: 77777
}
]
};
var MingMoneyTransferRecord = Auntie.depositRecord.slice();
console.log(MingMoneyTransferRecord);
console.log(MingMoneyTransferRecord === Auntie.depositRecord);
```
> 助教回覆:作業做的不錯喔 :+1:
有正確複製 Auntie.depositRecord 物件,不過本次作業,
可以嘗試 JSON 這個方法喔,卡斯伯老師有公告:"資料結構"要相同,但是"參考"要不同 ~
因為 JSON 是直接轉字串再轉回物件,因此記憶體指向不同,
所以使用 JSON 複製出來的物件和原本物件 "參考" 是不同的,如下面範例。
https://codepen.io/Isshin/pen/gOPgWKB?editors=1111
---
## Jerry
```javascript=
var Auntie = {
name: '漂亮阿姨',
age: 21,
deposit: 10000,
depositRecord: [
{
title: '小明匯款紀錄',
amounts: 77777
}
]
};
var MingMoneyTransferRecord = JSON.parse(JSON.stringify(Auntie.depositRecord));
console.log(MingMoneyTransferRecord);
console.log(MingMoneyTransferRecord === Auntie.depositRecord);
```
> 助教回覆:作業做的很好哦,很正確唷 :+1: