请向我解释 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;
但我不明白为什么。我被告知我的代码缺少转换。
我的问题是:
- 为什么需要将华氏度转换为摄氏度?
- 这一行到底发生了什么?
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
目标:使用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;
但我不明白为什么。我被告知我的代码缺少转换。
我的问题是:
- 为什么需要将华氏度转换为摄氏度?
- 这一行到底发生了什么?
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