修复了代码以创建由基础字段 [duplicate] 支持的 getter/setter 属性

Fix code to create a getter/setter property backed by an underlying field [duplicate]

提问人:theonerishi 提问时间:9/23/2023 最后编辑:Peter Mortensentheonerishi 更新时间:10/9/2023 访问量:76

问:

https://github.com/freeCodeCamp/freeCodeCamp/blob/139eecad25760621d42e482e34b6b57c980b6094/curriculum/challenges/english/02-javascript-algorithms-and-data-structures/es6/use-getters-and-setters-to-control-access-to-an-object.md#--instructions--

使用关键字创建类。接受华氏温度。classThermostatconstructor

在类中,创建 a 以获得以摄氏度为单位的温度,创建 a 以摄氏度为单位设置温度。gettersetter

请记住,和 ,其中是以华氏度为单位的温度值,是以摄氏度为单位的相同温度值。C = 5/9 * (F - 32)F = C * 9.0 / 5 + 32FC

注意:实现此功能时,您将在一个刻度(华氏度或摄氏度)中跟踪类内的温度。

这就是吸气剂和二传手的力量。您正在为另一个用户创建一个 API,无论您跟踪哪个用户,该用户都可以获得正确的结果。

换言之,您正在从用户那里抽象出实现细节。

// Only change code below this line
class Thermostat {
  constructor(temperature) {
    this.temperature = temperature;
  }
  get temperature() {
    return 5/9 * (this.temperature - 32);
  }
  set temperature(updatedTemperature) {
    this.temperature = 9 * updatedTemperature / 5 + 32;
  }
}
// Only change code above this line

const thermos = new Thermostat(76); // Setting in Fahrenheit scale
let temp = thermos.temperature; // 24.44 in Celsius
thermos.temperature = 26;
temp = thermos.temperature; // 26 in Celsius

怎么了?

JavaScript getter-setter

评论

2赞 user3840170 9/23/2023
与您的实际问题无关,在一个地方使用一个温标,而在旁边使用另一个温标,并且没有迹象表明温标不同,这似乎是一个糟糕的设计。
1赞 philipxy 9/25/2023
调试问题需要一个最小的可重现示例--剪切、粘贴和可运行的代码,包括初始化;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。对于包含您可以提供的最少代码的调试,即您显示的代码是好的,由您显示的代码扩展为“不正常”。 如何咨询帮助中心 当你得到一个你意想不到的结果时,找到执行中的第一个点,其中变量或子表达式的值不是你所期望的,并说出你所期望的和为什么, 通过文档证明是合理的。(调试基础。

答:

1赞 Konrad 9/23/2023 #1

您必须创建一个属性,否则,您在使用this.temperature)

// Only change code below this line
class Thermostat {
  _temperature = 0
  constructor(temperature) {
    this._temperature = temperature;
  }
  get temperature() {
    return 5/9 * (this._temperature - 32);
  }
  set temperature(updatedTemperature) {
    this._temperature = 9 * updatedTemperature / 5 + 32;
  }
}
// Only change code above this line

const thermos = new Thermostat(76); // Setting in Fahrenheit scale
let temp = thermos.temperature; // 24.44 in Celsius
thermos.temperature = 26;
temp = thermos.temperature; // 26 in Celsius
console.log(temp)

您可以使用以下方法创建私有属性#

// Only change code below this line
class Thermostat {
  #temperature = 0
  constructor(temperature) {
    this.#temperature = temperature;
  }
  get temperature() {
    return 5/9 * (this.#temperature - 32);
  }
  set temperature(updatedTemperature) {
    this.#temperature = 9 * updatedTemperature / 5 + 32;
  }
}
// Only change code above this line

const thermos = new Thermostat(76); // Setting in Fahrenheit scale
let temp = thermos.temperature; // 24.44 in Celsius
thermos.temperature = 26;
temp = thermos.temperature; // 26 in Celsius
console.log(temp)