构造函数必须通过 new 调用才能正确实例化,否则 this 指向全局、无原型链、返回 undefined;new 触发四步流程:创建空对象、绑定 prototype、以该对象为 this 执行构造函数、按规则返回对象。

构造函数通过 new 关键字实例化,本质是触发一套标准化的对象创建流程:生成新对象、绑定原型、执行初始化、按规则返回结果。
构造函数必须配合 new 才能正确初始化实例
构造函数本身只是普通函数,只有用 new 调用时,JavaScript 引擎才会启动四步实例化机制:
- 创建一个空对象(
{}) - 将该对象的
__proto__指向构造函数的prototype - 以这个新对象为
this,执行构造函数体内的代码(如赋值this.name = name) - 若构造函数显式返回一个对象,则返回它;否则返回新创建的对象
不加 new 会出问题
直接调用构造函数(如 Person('Alice', 25))会导致:
-
this指向全局对象(非严格模式下是window或global),污染全局作用域 - 不会建立原型链,实例无法访问
Constructor.prototype上的方法 - 函数返回
undefined(无显式返回时),得不到预期对象
如何安全使用 new 实例化
推荐实践包括:
立即学习“Java免费学习笔记(深入)”;
- 构造函数名首字母大写(如
Car、User),形成可读约定 - 在构造函数内部统一用
this初始化实例属性,避免遗漏 - 把共用方法挂载到
Constructor.prototype,节省内存 - 必要时可在构造函数开头检测调用方式:
if (!(this instanceof Constructor)) return new Constructor(...)
ES6 class 也是基于 new 的语法糖
class 写法(如 class Animal { constructor(name) { this.name = name; } })本质上仍依赖 new 实例化。调用 new Animal('dog') 时,引擎执行的仍是上述四步流程,只是语法更清晰、语义更明确。


















