构造函数加原型模式是javascript模拟面向对象的经典方式,构造函数初始化实例属性,原型统一管理共享方法,提升内存效率和继承能力。

构造函数加原型模式是 JavaScript 中模拟面向对象编程的经典方式,它比工厂函数更清晰地表达“实例与共享方法”的关系,也更利于内存优化和继承扩展。
构造函数负责初始化实例属性
把原本在工厂函数里重复创建的属性,移到构造函数中,用 this 绑定到新实例上:
// 工厂函数(每次调用都新建对象和方法)
function createPerson(name, age) {
return {
name,
age,
sayHello() { console.log(`Hi, I'm ${this.name}`); }
};
}
// 构造函数(只初始化属性,方法交给原型)
function Person(name, age) {
this.name = name;
this.age = age;
}
原型对象统一管理共享方法
把所有不依赖闭包、不需私有状态的方法,挂到 Person.prototype 上。这样每个实例不再重复创建函数,而是共享同一份逻辑:
Person.prototype.sayHello = function() {
console.log(`Hi, I'm ${this.name}`);
};
Person.prototype.getAge = function() {
return this.age;
};
调用时和工厂函数效果一致,但底层更高效:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const p1 = new Person('Alice', 25);
const p2 = new Person('Bob', 30);
p1.sayHello(); // Hi, I'm Alice
p2.sayHello(); // Hi, I'm Bob
console.log(p1.sayHello === p2.sayHello); // true(同一函数引用)
注意 new 调用和 instanceof 的语义
使用构造函数必须配合 new 关键字,否则 this 会指向全局(非严格模式)或 undefined(严格模式),导致意外行为。同时,instanceof 能自然识别类型:
- ✅
const p = new Person('Tom', 28);—— 正确创建实例 - ❌
const p = Person('Tom', 28);—— 属性挂到全局,无原型链 -
p instanceof Person返回 true,便于类型判断和多态处理
可搭配 Object.create 或 ES6 class 进一步升级
如果需要更明确的继承,可以用 Object.create(Person.prototype) 手动设置原型链;或者直接用 class 语法(本质仍是构造函数 + 原型):
class Student extends Person {
constructor(name, age, grade) {
super(name, age);
this.grade = grade;
}
study() {
console.log(`${this.name} is studying`);
}
}
class 写法更简洁,但底层机制与构造函数 + 原型完全一致,只是语法糖。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










