构造函数中return不影响this指向,this始终绑定新实例;new的返回值取决于return类型:返回引用类型则返回该对象,否则返回新实例,且返回对象会破坏原型链和instanceof检测。

构造函数里写 return,this 本身不受影响——它始终指向新创建的实例对象;真正被改变的,是 new 表达式的最终返回值。
构造函数内 this 始终绑定新实例
只要用 new 调用,JavaScript 引擎第一步就创建一个空对象,并把 this 绑定到它身上。这一步发生在函数体执行前,不可覆盖、不可跳过。
- 哪怕你写了
return { name: 'Jack' },this.name = 'Tom'这行依然生效,属性确实写进了新对象 - 但这段赋值对最终结果“不可见”,因为 new 没返回它
-
this在函数体内从头到尾都是那个新对象,不是返回的那个对象
new 的返回值只看 return 的类型
new 不关心 this 怎么用,只检查构造函数有没有显式返回、返回的是什么类型:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 返回引用类型(对象、数组、函数、正则、日期等)→ new 结果就是这个返回值
- 返回原始值(
string、number、boolean、null、undefined)→ 忽略返回值,new 结果仍是this(即新实例) - 没写
return或return;→ 等价于return undefined,同样返回新实例
返回对象会破坏原型链和 instanceof
一旦构造函数返回一个对象,这个对象跟原构造函数完全无关:
-
obj instanceof Constructor会变成false -
obj.constructor指向的是返回对象的构造器(比如Object),不是原构造函数 - 原型链断裂:返回的对象不会继承
Constructor.prototype
什么时候可以安全返回对象?
这不是 bug,而是可被利用的机制,但需明确设计意图:
- 单例模式:始终返回同一个缓存实例
- 代理/适配器:包装原实例并暴露新接口
- 工厂封装:根据参数返回不同类型的对象(如
new Shape('circle')返回Circle实例) - 日常开发中,99% 场景应避免显式返回对象,防止意外打破实例语义
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










