You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造函数中get与set工作机制:Thermostat类setter温度转换疑问

问题解答

这个设计的核心原因是遵守题目约束+遵循单一数据源的封装原则,具体可以拆成3点:

  • 构造函数的入参规则要求:题目明确规定构造函数要接收华氏温度作为入参,所以类的内部存储默认就选了华氏温度作为基准值,保证初始化逻辑和后续读写逻辑的基准统一,不会出现初始化和后续赋值的基准不一致问题。
  • 避免多数据源同步bug:整个类只维护fahrenheit这一个原始存储值,不管是getter返回摄氏温度,还是setter接收摄氏温度,都只围绕这一个基准值做转换。不需要额外新增celsius属性存摄氏温度,自然也不会出现两个属性修改不同步导致的数值错误问题。
  • 封装内部实现细节:getter/setter的作用就是隔离内部实现和外部接口,你对外只需要用摄氏温度读写就行,内部用什么单位存储完全不需要对外暴露。哪怕你现在不需要输出华氏温度,后续如果要扩展返回华氏温度的接口,直接读已经存好的属性就行,不需要额外做转换。

如果你想内部直接存摄氏温度也完全可行,只需要调整构造函数的初始化逻辑即可,示例如下:

class Thermostat {
  constructor(fahrenheit) {
    // 初始化时先把传入的华氏转成摄氏存储
    this.celsius = (5 / 9) * (fahrenheit - 32);
  }
  
  get temperature() {
    return this.celsius;
  }
  
  set temperature(celsius) {
    this.celsius = celsius;
  }
}

这种实现只是内部存储基准和样例代码不同,对外的使用效果完全一致,只是不符合样例的设计选择而已。

内容的提问来源于stack exchange,提问作者Đức Seven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:57:04