使用getter与setter控制对象访问:Thermostat类实现疑问
现有代码问题说明
- 你定义了
static celcius静态属性,该属性属于类本身而非单个实例,会导致所有Thermostat实例共享同一个温度值,不符合需求。 - 构造函数仅存储了传入的华氏温度,没有完成初始值的对应处理,导致实例化后首次调用
temperaturegetter会返回undefined。 - setter逻辑错误:作业要求setter接收的是摄氏温度值,你代码里错误将传入值当作华氏温度做换算,也没有同步更新内部的华氏温度存储。
修正后实现代码
// Only change code below this line class Thermostat { constructor(fTemp) { // 内部仅以华氏度为基准存储温度,符合作业单温标跟踪要求 this._fTemp = fTemp; } // getter 自动将内部华氏度转为摄氏度返回 get temperature() { return Number((5 / 9 * (this._fTemp - 32)).toFixed(2)); } // setter 接收摄氏温度,转为华氏度后更新内部存储 set temperature(cTemp) { this._fTemp = cTemp * 9.0 / 5 + 32; } } // Only change code above this line const thermos = new Thermostat(76); // 构造传入华氏温度 let temp = thermos.temperature; // 24.44 摄氏度 thermos.temperature = 26; // 传入摄氏温度设置 temp = thermos.temperature; // 26 摄氏度
实现说明
- 内部使用下划线前缀
_fTemp标识内部私有属性,避免和公开的temperature存取器冲突 - 所有转换逻辑封装在类内部,对用户完全屏蔽实现细节,用户仅需通过
temperature属性即可读写摄氏温度,双向转换自动完成 - 完全满足所有作业校验要求,实例化、getter/setter调用均可正常返回预期结果
内容的提问来源于stack exchange,提问作者Claude Manbodh
相关产品推荐
相关产品推荐

