构造函数配合new关键字创建对象实例,本质是让javascript引擎执行标准化初始化流程:创建空对象、绑定this、执行函数体、返回对象;构造函数首字母大写,不显式返回对象,通过this初始化;new触发四步操作并确保正确原型继承;无new会污染全局;class是构造函数语法糖。

构造函数配合 new 关键字创建对象实例,本质是让 JavaScript 引擎执行一套标准化的对象初始化流程。核心在于:构造函数本身是普通函数,但被 new 调用时,会自动完成四件事——创建空对象、绑定 this、执行函数体、返回对象。
构造函数的写法和命名规范
构造函数本质上是普通函数,但习惯上首字母大写(如 Person),用来区分普通函数和构造意图。它不显式返回对象,而是通过修改 this 来初始化新对象。
例如:
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log(`Hello, I'm ${this.name}`);
};
}
new 关键字触发的四步操作
当执行 const p = new Person('Alice', 25) 时,引擎内部发生:
- 创建一个全新的空对象(即即将返回的实例)
- 将该对象的
[[Prototype]]指向构造函数的prototype对象(实现原型继承) - 以这个新对象为
this,调用构造函数(所以函数体内this.name实际是给新对象添加属性) - 若构造函数没有显式返回对象,则默认返回这个新对象;如果返回原始值(如字符串、数字),则忽略;如果返回对象,则覆盖默认返回值(一般避免这么做)
为什么需要 new?直接调用不行吗?
如果不加 new,比如 Person('Alice', 25),函数就作为普通函数执行:this 指向全局对象(非严格模式下是 window 或 global,严格模式下是 undefined),不仅得不到预期对象,还可能污染全局环境。
现代做法常加防护:
function Person(name, age) {
if (!(this instanceof Person)) {
return new Person(name, age);
}
this.name = name;
this.age = age;
}
与 class 语法的关系
ES6 的 class 是构造函数的语法糖。下面两种写法等价:
class Animal {
constructor(name) {
this.name = name;
}
}
// 等价于
function Animal(name) {
this.name = name;
}
它们都依赖 new 创建实例,且 class 内部方法自动定义在原型上,比手写构造函数更清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











