构造函数中this指向新创建的实例对象;new调用时引擎创建空对象、绑定this、执行函数体、隐式返回实例,this始终指向该实例,且不受赋值变量影响,忘写new则this指向全局或undefined。

构造函数里 this 指向新创建的实例对象
当你用 new 关键字调用一个函数时,JavaScript 引擎会自动执行四步操作:创建空对象、将 this 绑定到该对象、执行函数体、隐式返回该对象(除非显式 return 一个对象)。这期间,函数内部的 this 始终指向这个正在被构建的新实例。
实例化过程决定了 this 的归属
构造函数本身没有特殊语法标记,关键在于调用方式。只要加上 new,函数就进入“构造模式”,此时 this 不再受外部作用域影响,也不指向全局或调用者,而是被强制绑定到即将诞生的实例上。
- 即使构造函数被赋值给其他变量,只要用 new 调用,this 仍指向新实例
- 如果忘记写 new,函数就退化为普通调用,this 指向全局(非严格)或 undefined(严格)——这是常见 bug 来源
- 构造函数中对 this 的属性赋值(如 this.name = name),本质就是往新实例上挂载属性
与普通函数调用形成鲜明对比
同一个函数,调用方式不同,this 完全不同:
- Person('Alice') → this 是 window 或 undefined,属性可能意外挂到全局
- new Person('Alice') → this 是 { name: 'Alice' },干净隔离的实例
- ES6 class 内部的 constructor 也遵循相同规则,this 同样指向 new 出来的实例
箭头函数在构造函数中不改变 this 绑定
构造函数体内定义的箭头函数,其 this 不受 new 影响,而是继承外层函数的 this —— 也就是那个新实例。所以它能安全访问实例属性,不会因 setTimeout 或回调丢失上下文。
- 比如在 constructor 中写 setTimeout(() => console.log(this.name), 100),this 依然有效
- 但若用普通函数做回调,this 会丢失,需手动 bind 或改用箭头函数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











