构造函数中return基本类型被忽略,仍返回this实例;return引用类型则直接覆盖默认结果,丢弃this并返回该对象。

在构造函数中使用 return 会影响最终返回的对象,而 this 的行为本身不会变——它始终指向 new 创建的新实例。真正起作用的是 return 语句的返回值类型:基本类型被忽略,引用类型则直接覆盖默认返回结果。
return 基本类型:this 仍被返回
当构造函数显式 return 一个基本类型(如 string、number、boolean、null、undefined、symbol、bigint),JavaScript 会忽略该 return,继续返回 new 创建的那个新实例(即 this)。
- 原型链保持完整:对象的
__proto__指向构造函数的prototype -
instanceof判定为 true -
constructor属性正确指向原构造函数 - 原型上的方法可正常调用
return 引用类型:this 被丢弃,新对象失效
只要 return 的是引用类型(Object、Array、Function、Date、RegExp、自定义类实例等),new 表达式就立即返回该对象,不再返回原本创建的 this 实例。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 新创建的实例完全被丢弃,内存中可能被回收
- 返回对象的
__proto__不等于构造函数的prototype -
instanceof Constructor返回 false -
obj.constructor不再指向该构造函数(甚至可能为 undefined) - 无法访问构造函数 prototype 上定义的方法
哪些值算“引用类型”?
判断标准不是写法,而是值的内部类型:
立即学习“Java免费学习笔记(深入)”;
- ✅ 触发覆盖:
{}、[]、function(){}、new Date()、/reg/、new Map()、new Promise() - ❌ 不触发覆盖(被忽略):
123、"hello"、true、null、undefined、Symbol('a')、10n
为什么 this 在函数体内没变,但最终结果变了?
因为 this 是构造函数执行时的上下文绑定对象,它从不因 return 改变。但 new 表达式的规范规定:若构造函数返回引用值,则整个 new 调用的结果就是那个引用值,与 this 无关。这属于语言层面的返回值接管机制,不是 this 失效,而是 new 主动放弃了它。

















