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

JavaScript Class属性返回undefined及static关键字使用报错问题

解决方案

问题根源

  • 原代码中isXEqualZero函数定义位置在类实例化之后,若实际代码中用的是函数表达式而非函数声明,会因为没有变量提升导致调用时返回undefined
  • static关键字定义的是类本身的属性,不属于实例,定义时this指向类而非实例,无法读取实例的x属性,因此抛出类型错误
  • 属性逻辑和命名不匹配:isXEqualZero返回x==0为真,你需要的xNotEqualZero属性应该对该结果取反才符合语义

正确实现代码

// 先定义工具函数,保证类实例化时可以正常调用
function isXEqualZero(x) {
     return x == 0;
};

// 类名避免使用和内置对象近似的object,改为自定义名称避免潜在冲突
class CustomObj {
     constructor(x) {
          this.x = x;
          // 初始化时固定计算一次,后续不会再变化
          this.xNotEqualZero = !isXEqualZero(this.x);
     };
     change() {
          if (this.x > 0) {
               this.x += 1;
          } else if (this.x < 0) {
               this.x -= 1;
          };
     };
};

let objectOne = new CustomObj(3);

// 每帧调用change,x会持续变化,但xNotEqualZero不会更新
objectOne.change();
console.log(objectOne.xNotEqualZero); // 输出 true,符合预期

实现说明

你要求xNotEqualZero无论调用多少次change都保持初始值不变,只需要在实例初始化的constructor阶段计算一次值即可,不需要额外做动态监听,后续修改x属性不会影响已经初始化完成的xNotEqualZero值,完全符合需求。

内容的提问来源于stack exchange,提问作者aaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:57:03