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
相关产品推荐
相关产品推荐

