javascript中构造函数的this绑定依赖new调用:new会创建实例、设置原型、执行函数并返回实例;无new时非严格模式this指向全局,严格模式为undefined;类语法强制new,箭头函数不可构造。

在 JavaScript 中,构造函数里的 this 会自动绑定到新创建的实例对象上——前提是必须用 new 关键字调用该函数。
new 调用时 this 的绑定过程
当使用 new Constructor() 时,JavaScript 引擎内部会执行四步:
- 创建一个全新的空对象(即实例)
- 将这个新对象的 [[Prototype]] 指向
Constructor.prototype - 以这个新对象为 this,执行
Constructor函数体 - 若构造函数没有显式返回对象,则默认返回该新对象
不加 new 时 this 指向哪里?
如果忘记写 new,比如直接调用 Person("Alice"),那么:
- 非严格模式下:this 指向全局对象(浏览器中是
window) - 严格模式下:this 是
undefined,通常会报错 - 结果往往是意外修改全局变量,或抛出 TypeError
如何确保 this 正确绑定?
有几种实用方式避免误用:
-
命名约定:构造函数首字母大写(如
Person),提醒自己要用new -
运行时检查:在函数内判断
this是否为当前类的实例,不是则自动补new -
ES6 类语法:用
class定义,它强制要求用new,否则直接报TypeError
箭头函数不能当构造函数
箭头函数没有自己的 this,也没有 prototype 和 [[Construct]] 内部方法,因此:
- 无法用
new调用箭头函数,会抛出TypeError: xxx is not a constructor - 它的 this 始终继承自外层作用域,与调用方式无关
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











