请向我解释 setter 如何在 JavaScript 中的 class 中工作

Please explain to me how a setter work inside a class in JavaScript

目标:使用class关键字创建恒温器class。构造函数接受华氏温度。在 class 中,创建一个 getter 以获取摄氏温度和一个 setter 以设置摄氏温度。

到目前为止,这是我的代码:

class Thermostat {
  constructor(fahrenheit){
    this.fahrenheit = fahrenheit;
  }

  get temperature(){
    const inCelcius = 5/9 * (this.fahrenheit - 32) ;
    return inCelcius;

  }

  set temperature (temperatureInCelcius){
    this.fahrenheit = temperatureInCelcius;
  }

}

const thermos = new Thermostat(76); // Setting in Fahrenheit scale
let temp = thermos.temperature; // should show 24.44 in Celsius
console.log(temp);
thermos.temperature = 26;
temp = thermos.temperature; // should show 26 in Celsius but right now showing -3.333
console.log(temp);

我知道正确的解决方案是将 this.fahrenheit = temperatureInCelcius; 更改为 this.fahrenheit = (celsius * 9.0) / 5 + 32;

但我不明白为什么。我被告知我的代码缺少转换。

我的问题是:

  1. 为什么需要将华氏度转换为摄氏度?
  2. 这一行到底发生了什么? thermos.temperature = 26; 我的理解是,当编译器看到该行时,它会在构造函数中调用该行
set temperature (temperatureInCelcius){
    this.fahrenheit = temperatureInCelcius;
  }

然后将26放入参数(temperatureInCelcius),然后将this.fahrenheit的属性值设置为26。

只是想要一些解释,因为我觉得我错过了什么。非常感谢您的帮助! <3

当您执行 temp = thermos.temperature; 时,将调用 get temperature(),对于 thermos.temperature = 26;,将调用 set temperature()

// thermos.temperature = 76
const thermos = new Thermostat(76);

// this calls get temperature() and return 24.44
// 5/9 * (76 - 32) = 24.44
let temp = thermos.temperature;

console.log(temp); // 24.44

// this calls set temperature() and sets thermos.temperature = 26
thermos.temperature = 26;

// this calls get temperature() and return -3.333
// 5/9 * (26 - 32) = -3.333
temp = thermos.temperature;

console.log(temp); // -3.33