JavaScript对象初始化期间如何实现字段求值?
解决JavaScript对象初始化时的字段求值问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是JavaScript构造函数的调用方式和Python不一样——JS里用构造函数创建实例必须用new关键字,不然函数只是普通执行,不会返回对象实例,这就是为什么你的代码里a.b没有结果的原因。
先修正你的原始代码
你原来的代码少了关键的new关键字,导致a实际上是undefined,自然访问不到b属性。修正后如下:
function A(a) { this.b = []; // 如果你想要和Python示例一样输出到15,循环条件要改成i < 6哦 for (var i = 0; i < 6; i++) { this.b.push(a * i); } } // 必须用new关键字创建实例 const a = new A(3); console.log(a.b); // 输出:[0, 3, 6, 9, 12, 15]
更贴近Python类写法的ES6方案
如果你习惯Python的类语法,ES6的class语法会更对你胃口,写法和Python非常相似:
class A { constructor(a) { this.b = []; for (let i = 0; i < 6; i++) { this.b.push(a * i); } } } const a = new A(3); console.log(a.b); // 同样输出:[0, 3, 6, 9, 12, 15]
为什么原来的代码不行?
当你直接调用A(3)时:
- 函数内部的
this会指向全局对象(浏览器环境是window,Node.js是global),而不是新创建的实例 - 因为函数没有显式返回值,所以
a会被赋值为undefined - 这时候访问
a.b自然就没有结果啦
内容的提问来源于stack exchange,提问作者Aleks Lee
相关产品推荐
相关产品推荐

