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

JavaScript中创建含其他属性之和属性的对象及NaN问题求助

解决对象字面量中属性依赖其他属性的NaN问题

嘿,我完全懂你的困惑——这个问题其实是JavaScript里对象字面量的this指向坑在搞鬼!

为啥会得到NaN?

当你用对象字面量{}创建对象时,里面的this并不指向正在创建的这个对象A,而是指向当前的执行上下文(比如浏览器环境里是window,Node.js里是global,严格模式下甚至是undefined)。这时候this.a和this.b都是undefined,两个undefined相加自然就得到NaN了。

几种靠谱的解决方案

我给你列几个常用的解决办法,你可以根据需求选:

1. 使用Getter方法(推荐,支持实时更新)

用get关键字定义c,这样每次访问A.c时都会重新计算,能自动同步a和b的变化:

var A = {
  a: 0,
  b: 0,
  get c() {
    return this.a + this.b;
  }
};

试一下:

console.log(A.c); // 输出0
A.a = 5;
A.b = 3;
console.log(A.c); // 输出8,自动更新了!

2. 创建对象后再赋值c(适合只需要初始值的场景)

如果你只需要c的初始值,不需要后续同步a和b,可以先创建对象,再手动给c赋值:

var A = {
  a: 0,
  b: 0
};
A.c = A.a + A.b;
console.log(A.c); // 输出0

不过这种方式下,后续修改A.a或A.b,A.c不会跟着变哦。

3. 使用构造函数(适合创建多个同类对象)

如果需要批量创建这种带有依赖属性的对象,构造函数会更方便:

// 基础版(仅初始化时计算c)
function MyObject() {
  this.a = 0;
  this.b = 0;
  this.c = this.a + this.b;
}
var A = new MyObject();
console.log(A.c); // 输出0

// 进阶版(支持实时更新)
function MyObject() {
  this.a = 0;
  this.b = 0;
}
MyObject.prototype = {
  get c() {
    return this.a + this.b;
  }
};
var A = new MyObject();
A.a = 10;
console.log(A.c); // 输出10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:25:53