new表达式返回值由构造函数return决定:返回原始值时忽略,仍返回新实例;返回对象时直接返回该对象;return this则保持默认行为;箭头函数不可new且无this绑定。

构造函数的返回值不会改变 this 的指向,但会直接影响 new 表达式最终返回什么。也就是说:this 始终指向新创建的实例(只要没被显式 return 覆盖),但 new 的结果可能不是它。
返回原始值(string/number/boolean/null/undefined)时,this 不受影响,new 仍返回新实例
构造函数内部 this 指向新对象,你给 this 添加的属性会被保留;但若 return 一个原始值(比如字符串、数字),这个返回值会被忽略,new 还是返回那个新实例。
- function Person(name) { this.name = name; return 42; }
- const p = new Person('Alice'); // p 是 Person { name: 'Alice' },不是 42
- console.log(p.name); // 'Alice'
返回对象(包括数组、函数、正则、日期等引用类型)时,new 直接返回该对象,this 被“丢弃”
此时构造函数内部的 this 依然指向新实例,也照样执行了初始化逻辑(比如 this.xxx = yyy),但 new 表达式不返回它,而是返回你 return 的那个对象——相当于覆盖了默认行为。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- function Person(name) { this.name = name; return { id: Date.now() }; }
- const p = new Person('Bob'); // p 是 { id: 17537... },不是 Person 实例
- console.log(p.name); // undefined —— 因为 p 根本不是那个新实例
return this 是安全且常见的写法
显式返回 this,相当于确认使用默认行为。它既不会干扰原型链,也不会丢失初始化结果,还能让构造函数支持链式调用或兼容某些构建器模式。
- function Builder(value) { this.value = value; return this; }
- const b = new Builder(100); // b 是 Builder { value: 100 }
箭头函数不能用 new,也没有 this 绑定机制
箭头函数没有 prototype,不能作为构造函数;尝试 new 会直接报错 TypeError。它也不绑定自己的 this,而是继承外层作用域的 this —— 所以根本不存在“构造函数中 this 指向”这一问题。
- const Person = (name) => { this.name = name; };
- new Person('Tom'); // TypeError: Person is not a constructor
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










