构造函数通过function定义模板并用new生成实例,使对象共享方法、结构一致;需首字母大写,用this绑定属性,必须new调用;方法应挂prototype以节省内存;可用instanceof准确判断类型;class是其语法糖。

用构造函数创建对象,核心是通过 function 定义模板,再用 new 关键字生成实例,让多个对象共享方法、保持结构一致,避免重复写逻辑。
构造函数的基本写法
函数名首字母大写(约定俗成,方便识别),内部用 this 绑定实例属性:
- 定义时不用
return,new会自动返回新对象 -
this指向新创建的实例,不是全局或调用者 - 必须搭配
new使用,否则this会指向window(非严格模式)或undefined(严格模式)
例如:
function Person(name, age) {
this.name = name;
this.age = age;
}
const p1 = new Person('张三', 25); // ✅ 正确
const p2 = Person('李四', 30); // ❌ 普通调用,this 失效
把方法挂到原型上,节省内存
如果在构造函数里直接写方法,每个实例都会复制一份,浪费空间。应统一放在 prototype 上:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 所有实例共享原型上的方法,只存一份
- 实例能通过原型链访问这些方法
- 修改原型方法,所有已有实例立即生效
示例:
function Car(brand, price) {
this.brand = brand;
this.price = price;
}
Car.prototype.start = function() {
console.log(`${this.brand} 启动了`);
};
const c1 = new Car('Toyota', 150000);
const c2 = new Car('BMW', 450000);
c1.start(); // Toyota 启动了
c2.start(); // BMW 启动了
配合 instanceof 判断类型
构造函数会在实例的内部属性 [[Prototype]] 中记录来源,所以可用 instanceof 安全判断对象“是不是由某个构造函数创建”:
-
p1 instanceof Person返回true - 比
typeof更准确(typeof对所有对象都返回"object") - 比检查
constructor属性更可靠(后者可能被改写)
现代替代方案:class 语法糖
ES6 的 class 本质仍是基于构造函数和原型,但写法更清晰、支持继承和静态方法:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} 叫了一声`);
}
static isAnimal(obj) {
return obj instanceof Animal;
}
}
const dog = new Animal('旺财');
dog.speak(); // 旺财 叫了一声
它底层仍会生成构造函数,并把 speak 放到 Animal.prototype 上。

















