setter在这段代码中做了什么? ES6:使用getter和setter来控制对象的访问

时间:2018-04-25 17:14:41

标签: javascript

我知道这段代码的原因是将华氏温度改为摄氏温度,但如果get已经以摄氏度返回温度,那么setter在代码中做了什么?

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

3 个答案:

答案 0 :(得分:1)

我同意这个制定者似乎没有用处。事实上,它阻止了这个类的工作(假设)。

此行无效,因为它不会更新_fahrenheit属性:

this._fahrenheit - (value * 9) / 5.0 + 32;

它应该只是“记录”新值并让getter进行转换:

function makeClass() {
  "use strict";

  class Thermostat {
    constructor(value) {
      this._fahrenheit = value;
    }
    get temperature() {
      return (5 / 9 * (this._fahrenheit - 32));
    }
    set temperature(value) {
      this._fahrenheit = value;
    }
  }
  return Thermostat;
}
const Thermostat = makeClass();
const thermos = new Thermostat(76); // setting in Farenheit scale
let temp = thermos.temperature; // 24.4444° Celcius
console.log(thermos.temperature);
thermos.temperature = 98.6;
console.log(thermos.temperature); // 37° Celcius

答案 1 :(得分:1)

通过实现设置器功能,您可以让用户仍然选择选择摄氏或华氏度的温度来获取正确的值。

答案 2 :(得分:0)

进行一些计算,但不返回任何值,也不设置任何变量。除了消耗最少的处理器时间外,它什么都不做。