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

