使用 getter 和 setter 来控制对象的访问?

使用 getter 和 setter 来控制对象的访问

使用 class 关键字创建一个 Thermostat class。 constructor 接收一个华氏温度.
记得在 C = 5/9 (F - 32) 和 F = C 9.0 / 5 + 32 中,F 是华氏温度值,C 是摄氏温度值。
下面代码应该怎么修改?

// 只修改这一行下面的代码
  class Thermostat{
    constructor(farenheit){
      this.farenheit= 5/9 * (farenheit - 32);
    }
    get temperature(){
      return this.farenheit;
    }
    set temperature(){
      this.farenheit=farenheit;
    }
  }
// 只修改这一行上面的代码
const thermos = new Thermostat(76); // 设置为华氏刻度
let temp = thermos.temperature; // 24.44 摄氏度
thermos.temperature = 26;
temp = thermos.temperature; // 26 摄氏度

已经自己解决
set temperature(farenheit){

  this.farenheit=farenheit;

}
需要参数

阅读 532
avatarAI BotBETA

看起来您希望使用 getter 和 setter 方法来控制对 Thermostat 对象内部温度的访问。在 JavaScript 中,getter 和 setter 可以用于获取和设置对象的属性,同时可以在这些操作中进行一些自定义的操作。

然而,在您提供的代码中,getter 和 setter 方法并没有正确地实现。在 setter 方法中,您没有考虑到将输入的参数转换为华氏温度。在 getter 方法中,您没有考虑到从华氏温度转换为摄氏温度。

以下是修改后的代码:

class Thermostat {
  constructor(farenheit) {
    this._farenheit = 5 / 9 * (farenheit - 32);
  }
  get temperature() {
    return this._farenheit; // 返回华氏温度
  }
  set temperature(newTemperature) {
    // 注意这里我们使用参数 newTemperature,而不是 farenheit
    this._farenheit = 5 / 9 * (newTemperature - 32); // 将输入的摄氏温度转换为华氏温度并存储
  }
}

const thermos = new Thermostat(76); // 设置为华氏刻度
let temp = thermos.temperature; // 24.44 摄氏度
thermos.temperature = 26; // 这会改变 thermos 的内部 _farenheit 值,但不会改变 temperature 的显示
temp = thermos.temperature; // 26 摄氏度

在上述代码中,我们添加了一个私有变量 _farenheit 来存储实际的华氏温度。在 temperature 的 getter 方法中,我们返回的是 _farenheit 的值。在 temperature 的 setter 方法中,我们将输入的参数 newTemperature 转换为华氏温度并存储在 _farenheit 中。这样,我们就可以通过 temperature getter 和 setter 来控制对 _farenheit 的访问,并实现了华氏温度和摄氏温度之间的转换。

1 个回答

不太明白你要干什么

  1. 你的 constructor,看起来是接收了一个华氏度然后转成摄氏度保存起来
    那既然是摄氏度为什么这个成员叫 farenheit
  2. 你的 set temperature 没有接收参数,这是跑不起来的。
class Thermostat {
  constructor(farenheit) {
      this.celsius = 5/9 * (farenheit - 32)
  }
  get temperature() {
      return this.celsius
  }
  set temperature(celsius) {
      this.celsius = celsius;
  }
}

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题