JavaScript构造函数本质是普通函数,仅因new调用而具备实例化能力;其首字母大写为约定,通过this绑定属性方法,new调用时自动创建对象、设置原型、绑定this并默认返回新对象。

JavaScript构造函数本质上就是普通函数,只是调用方式和用途不同——当一个函数通过 new 关键字调用时,它就被称为构造函数。
构造函数的典型写法和调用方式
构造函数通常首字母大写(约定,非强制),内部使用 this 绑定新对象的属性和方法:
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log('Hello, I\'m ' + this.name);
};
}
const alice = new Person('Alice', 25); // ✅ 用 new 调用 → 构造函数行为
此时 JavaScript 引擎会自动:
– 创建一个空对象
– 将该对象的 [[Prototype]] 指向 Person.prototype
– 把 this 绑定到这个新对象
– 若函数无显式返回对象,则默认返回该新对象
立即学习“Java免费学习笔记(深入)”;
构造函数 vs 普通函数:关键区别
1. 调用方式决定角色
– Person('Bob', 30) → 普通函数调用:this 指向全局(非严格模式)或 undefined(严格模式),不创建实例,可能污染全局
– new Person('Bob', 30) → 构造函数调用:生成新实例,this 指向该实例
2. 返回值处理不同
– 普通函数可自由返回任意值(数字、字符串、对象等)
– 构造函数若返回原始值(如字符串、数字),会被忽略,仍返回新创建的对象;只有显式返回**对象类型**时,才替代默认返回值
3. 设计意图与语义不同
– 构造函数专为创建特定类型对象设计,配合 prototype 实现继承和方法复用
– 普通函数侧重执行任务、计算或封装逻辑,不负责实例化
现代替代方案:class 和工厂函数
ES6 的 class 语法本质是构造函数的语法糖:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a sound');
}
}
const dog = new Animal('Dog'); // 底层仍是构造函数调用
而工厂函数则完全避开 new,用普通函数返回新对象:
function createCar(brand, year) {
return {
brand,
year,
start() { console.log(brand + ' engine started'); }
};
}
const myCar = createCar('Tesla', 2023); // 不用 new,更灵活,适合组合而非继承










