为什么es6中的setter函数会返回一个摄氏值而不是一个法氏值

时间:2018-11-02 17:40:40

标签: es6-class

我的问题是关于函数makeClass()中的setter函数的。

set temperature(celsius) {
this.farenheit = celsius * 9.0 / 5 + 32;
}
  1. 代码为什么要使用计算F = C * 9.0 / 5 + 32,这是Farenheit的公式,并返回26摄氏度而不是26摄氏度,如下面在makeClass( )功能。

    temp =保温温度; // 26 in C

下面是freecodecamp的练习,它是正确的,但由于上述原因,我实际上并不理解它的工作原理。

function makeClass() {
  "use strict";
  /* Alter code below this line */
  class Thermostat {
    constructor(farenheit) {
      this.farenheit = farenheit;
    }
    get temperature() {
      return 5 / 9 * (this.farenheit - 32);
    }
    set temperature(celsius) {
      this.farenheit = celsius * 9.0 / 5 + 32;
    }
  }
  /* Alter code above this line */
  return Thermostat;
}
const Thermostat = makeClass();
const thermos = new Thermostat(76); // setting in Fahrenheit scale
let temp = thermos.temperature; // 24.44 in C
console.log(temp)
thermos.temperature = 26;
temp = thermos.temperature; // 26 in C
console.log(temp)

2 个答案:

答案 0 :(得分:0)

构造函数希望您以华氏度传递值并将其存储为华氏度。

getter被编程为以摄氏度返回值,因此由于该值以前以华氏度存储,因此必须将存储的值转换为摄氏。

设置程序被编程为接受摄氏温度值,但将其存储在华氏温度中,因此必须将传递给华氏温度的值转换为华氏温度。


我不知道为什么将构造函数编程为接受以华氏度表示的值,但是将getter和setter设置为摄氏度。您必须要问代码设计者为什么要这么做。我的猜测是,这只是出于演示的目的,向您展示如何拥有一个可自动为您处理单位转换的getter / setter。

答案 1 :(得分:0)

26在setter函数中传递给参数celsius并转换为farenheit,结果在getter函数中传递给this.farenheit并转换为celsius,在函数外部调用时返回26 C。