Getter在if语句中返回undefined,比较逻辑失效问题排查
问题分析与解决
你的代码存在兼容性问题,导致getter返回undefined,这不是正常行为。
核心原因
你在AlarmObj中使用了ES2022类实例字段语法(isAlarmOn = true),如果运行环境(比如旧版Node.js、浏览器)不支持该特性,isAlarmOn不会被添加到实例上,getter自然返回undefined。你提到的“getter调用晚于if语句执行”是误解,实际是isAlarmOn未被正确初始化,导致getter返回值不符合预期。
修复方案
有两种方式解决这个问题:
方案一:改用构造函数初始化属性(兼容性最好)
把类字段移到构造函数内初始化,这是ES6及以上都支持的写法:
class AlarmObj { constructor() { this.isAlarmOn = true; } get getAlarmOnOffStatus() { return this.isAlarmOn; } } class ClockObj { constructor(AlarmObjArg) { this.AlarmObj = AlarmObjArg; if (this.AlarmObj.getAlarmOnOffStatus === true) { console.log('works'); } } } const alarm = new AlarmObj(); new ClockObj(alarm);
方案二:确保环境支持ES2022或转译代码
如果要保留类字段语法,需要确保运行环境(Node.js 16.13+、现代浏览器)支持ES2022,或者使用Babel等工具将代码转译为兼容低版本环境的语法。
额外提示
代码中AlarmObj = new AlarmObj();会覆盖原来的类名,建议改用其他变量名(比如alarm),避免潜在的命名冲突。
内容的提问来源于stack exchange,提问作者ILIIA CHTEREV
相关产品推荐
相关产品推荐

