---
# System prepended metadata

title: 第四週小組任務-第1組
tags: [2022JS直播班, 小組任務, 六角學院]

---

# 第四週小組任務-第1組

###### tags: `小組任務`、`六角學院`、`2022JS直播班`


> 小組討論
> 會議時間：2022/10/24(一) 20:00
> 會議方式：Discord 頻道
> 參與人數： 8 人

## :memo: 簽到區 (參與live 會議)

| No. |   Discord Name   | 簽到 10/24   :heavy_check_mark:|
| --- | ---------------- | ------------------ |
| 1   | Barret#1119      |   :heavy_check_mark:|
| 2   | JustinLiu#9699   |  :heavy_check_mark: |
| 3   | Data#9297        | :heavy_check_mark:  |
| 4   | 教練#6451         | :heavy_check_mark: |
| 5   | jackson204#6363  |:heavy_check_mark: |
| 6   | Winnie#1306      | :heavy_check_mark:  |
| 7   | XYY#2630         |  |
| 8   | 健育#5748         | |
| 9   | H.L.C#2152       |  :heavy_check_mark: |
| 10  | beta lin#1445    |  :heavy_check_mark: |


## 小組任務


### 第一題 請挑選想討論的主題

請各組員一同討論第四關主線任務，討論方向有：

1. 觀看老師的範例影片跟程式碼，討論是否有其優化之處
2. 約時間一起練 BMI kata
3. 11/4(五) 前做完 [10 遍 BMI kata](https://rpg.hexschool.com/training/32/show?embed=https://docs.google.com/spreadsheets/d/1Vwd7XIwgzVbCL8z-Auj-em2D-GC3pIIN0xlY1dmzzNs/edit#gid=982233007)，請在此勾選 v，週五統計結果


---

### 上週未完，先來研究 什麼是 this

* [this：絕對不完整，但保證好懂](https://blog.techbridge.cc/2019/02/23/javascript-this/)
* [從 ECMAScript 規範解讀 this](https://github.com/mqyqingfeng/Blog/issues/7)
* [What's THIS in JavaScript ?](https://kuro.tw/posts/2017/10/12/What-is-THIS-in-JavaScript-%E4%B8%8A/)

![](https://i.imgur.com/gq7qm5J.png)

```javascript!
const doraemon = {
  name: "多拉Ａ夢",
  age: 20,
  color: "Blue",
  ears: false,
  toolNum: 42,
  timeTravel(num) {
    console.log(`回到過去${num}年！`);
  },
  useTool(toolName) {
    console.log(`今年 ${ this.age } 歲的 ${ this.name } 拿出道具 ${ toolName }！`);
  }
}

doraemon.useTool("任意門");
doraemon.timeTravel(2);

```
> 物件呼叫 永遠是物件
> function 呼叫就是 windows

```javascript!
function fun(){
 console.log("this =  " , this);
}


var obj = {
    name:"AAA",
    sayName:fun
};
var obj2 = {
    name:"BB",
    sayName:fun
};
console.log(obj.sayName == fun)
console.log(obj2.sayName == fun)

obj.sayName();
fun();

obj2.sayName();
fun();

/*
* 調用的方式不同，this會指向不同的對象
* fun(); => 函式調用 =>this 永遠指向 window
* obj.sayName();  =>方法調用=> this 就是那個物件
* */
```

---

### BMI KATA

![](https://i.imgur.com/As8UwiW.png)

![](https://i.imgur.com/4BSRTIg.png)

![](https://i.imgur.com/KPLDGmM.png)

![](https://i.imgur.com/CQLcrlB.png)

![](https://i.imgur.com/Ec2XrQg.png)


* 先把字串過濾掉，直接跳錯誤

* 用 switch 寫
* [使用Switch(true)模式](https://www.twblogs.net/a/6082f197753b6adabf6e0a53)

```javascript!
let bmiHistoryData = [];

function getBmi(h, w) {
    return (w / (h * 0.01) ** 2).toFixed(2);
}

//console.log(getBmi(100, 20));
function printBmi(h, w) {
    let bmi = getBmi(h, w);
    let result;
    let msg;
    switch (true) {
        case (bmi < 18.5):
            result = "overThin";
            break;
        case (bmi < 24):
            result = "normal";
            break;
        case (bmi < 27):
            result = "overWeight";
            break;
        case (bmi < 30):
            result = "mildFat";
            break;
        case (bmi < 35):
            result = "moderateFat";
            break;
        case (bmi >= 35):
            result = "severeFat";
            break;
        default:
            result = "error";
            msg = "您的數值輸入錯誤，請重新輸入";
    }
    if (result !== "error") {
        msg = `您的體重${bmiStatesData[result].state}，健康指數為${bmiStatesData[result].color}`;
        bmiHistoryData.push({bmi: bmi, result: result});
    }
    console.log(msg);
}

function showHistoryData() {
    let count = bmiHistoryData.length;
    let lastBmi = bmiHistoryData[count - 1].bmi;
    let lastResult = bmiHistoryData[count - 1].result;
    console.log(`您總共計算 ${ count } 次 BMI 紀錄，最後一次 BMI 指數為 ${ lastBmi }，體重${ bmiStatesData[lastResult].state }！健康指數為${ bmiStatesData[lastResult].color }！`);
}

const bmiStatesData = {
    "overThin": {
            "state": "過輕",
            "color": "藍色"
          },
    "normal": {
            "state": "正常",
            "color": "紅色"
          },
    "overWeight": {
            "state": "過重",
            "color": "澄色"
          },
    "mildFat": {
            "state": "輕度肥胖",
            "color": "黃色"
          },
    "moderateFat": {
            "state": "中度肥胖",
            "color": "黑色"
          },
    "severeFat": {
            "state": "重度肥胖",
            "color": "綠色"
          },
}


// Test
printBmi(178, 20);
printBmi(178, 70);
printBmi(178, 85);
printBmi(178, 90);
printBmi(178, 110);
printBmi(178, 130);
printBmi("身高", "體重");

console.log(bmiHistoryData);
showHistoryData();


```

* ![](https://i.imgur.com/Zsza6Dk.png)
* ![](https://i.imgur.com/MZeTZxa.png)

* function 判斷
 ![](https://i.imgur.com/msRxLrF.png)

