构造函数显式返回基本类型时不会失效,但被忽略而仍返回新创建的this对象;仅当返回引用类型时才覆盖默认返回结果。

不会失效,但返回值会覆盖构造函数的默认返回结果,this 本身仍正常工作。
构造函数的默认返回行为
当使用 new 调用函数时,JavaScript 引擎会自动创建一个空对象,并将其绑定到 this。如果函数没有显式返回对象(包括数组、函数、日期等引用类型),则默认返回这个 this 对象。
但如果构造函数显式返回一个基本数据类型(如 number、string、boolean、null、undefined、symbol、bigint),引擎会忽略该返回值,仍然返回新创建的 this 实例。
显式返回基本类型的实际效果
以下代码中,尽管返回了数字 42,但实例化结果仍是普通对象:
<script><br> function Person(name) {<br> this.name = name;<br> return 42; // 基本类型,被忽略<br> }<br> const p = new Person("Alice");<br> console.log(p); // Person {name: "Alice"}<br> console.log(p instanceof Person); // true<br> </script>
- 返回值 42 被丢弃
- this 绑定和属性赋值照常发生
- 最终返回的是构造函数内部创建的那个对象
只有返回引用类型才会覆盖默认返回
只有当显式返回一个对象(含数组、函数、正则、Date 等)时,才会取代默认的 this:
function Person(name) {
this.name = name;
return { age: 30 }; // 引用类型,生效
}
const p = new Person("Bob");
console.log(p); // { age: 30 } —— 不再是 Person 实例
console.log(p instanceof Person); // false
- 此时 this 依然有效(this.name 被赋值),但返回值被替换
- 新对象与 this 无关联,原始实例被丢弃
特别注意:return undefined 或不写 return
undefined 是基本类型,但它属于“未显式返回”或“return undefined”的自然情况,仍走默认流程:
function Person(name) {
this.name = name;
// 没有 return,或写 return undefined;
}
// 等价于默认返回 this
- 这和返回 42 或 "hello" 的处理逻辑一致:都被忽略
- 只要不是对象、数组、函数等引用类型,一律不改变返回结果
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











