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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:51:19