构造函数的返回值决定new表达式结果:返回原始值(含undefined)被忽略,仍返回新实例;返回对象则覆盖实例,instanceof失效;箭头函数不可new;class中需先super()再return对象。

构造函数的返回值会直接决定 new 表达式最终得到什么对象——它可能返回你亲手创建的实例,也可能返回你 return 出来的任意对象,甚至让原本该生成的实例被彻底丢弃。
返回原始值(字符串、数字、布尔等)会被忽略
只要构造函数里写了 return 后跟一个原始值(比如 return 123、return "ok"、return true),JavaScript 就当它没写,仍然返回新创建的实例对象。
- 即使
return undefined或干脆不写return,效果一样 - 此时
new Fn() instanceof Fn为true - 实例上的属性(如
this.name = "Alice")依然生效
返回对象类型(含数组、函数、日期、正则等)会覆盖实例
一旦 return 后是一个对象(任何引用类型),new 就放弃刚创建的空实例,直接把那个对象作为结果返回。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 返回的对象与构造函数无关,
instanceof检测失败 - 例如
return { x: 1 }或return new Date(),都导致new Fn() instanceof Fn === false - 常见陷阱:误写
return this.data(而this.data是个对象),结果返回的不是实例而是那个内部数据
箭头函数不能当构造函数用
箭头函数没有自己的 this 和 prototype,也不支持 new 调用。哪怕只写 new (() => {}),运行时立刻抛出 TypeError。
- 类方法里用箭头函数没问题,但它本身不是构造器
- 想实现可
new的行为,必须用function声明或class
class 构造器规则一致但有额外限制
class 的 constructor 返回逻辑和普通函数完全相同:原始值被忽略,对象被采纳。但它多了两条硬性要求:
- 子类中必须先调用
super()才能访问this - 如果在
super()前就return对象,会报错;之后return对象则正常覆盖实例
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










