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

JavaScript构造函数返回值规则及运行结果相关疑问

核心原因是JavaScript中new关键字调用构造函数的返回规则

当你用new调用一个构造函数时,执行逻辑如下:

  • 首先创建一个空的普通对象
  • 将该对象的隐式原型指向构造函数的prototype属性
  • 将构造函数内部的this绑定到这个新创建的对象上
  • 执行构造函数内部的所有代码
  • 最后一步判断返回值:如果构造函数主动返回了引用类型的值(对象、数组、函数等),则new调用的结果直接返回这个主动返回的值;如果没有返回值,或者返回的是原始类型值,才会返回最开始创建的、绑定了this的那个对象。

对你的代码的具体解释

你给出的Car构造函数最后主动返回了{ make: 'Maserati' },这是一个引用类型的普通对象,所以const myCar = new Car()里的myCar就是这个被主动返回的普通对象,自然不是函数,不能用myCar()的形式调用。
此时console.log(myCar.make)的输出就是'Maserati',而不是你预想的'Lamborghini'。

你认知的误区修正

如果你想要拿到值为'Lamborghini'的make,只需要删掉构造函数里的return语句即可,此时new Car()会返回绑定了this的默认对象,make属性就是你赋值的'Lamborghini'。
如果不用new,直接调用Car(),此时函数的返回值就是{ make: 'Maserati' },这种情况下你写const res = Car(); console.log(res.make)才会输出'Maserati'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:04