构造函数搭配原型模式实现高效复用,核心是属性私有化、方法共享化:构造函数初始化实例独有属性(尤其引用类型),原型挂载共享方法,配合动态原型、Object.freeze和Map缓存提升健壮性与性能。

构造函数搭配原型模式实现高效复用,核心在于“属性私有化、方法共享化”——实例独享数据,所有实例共用一套方法逻辑,既避免重复创建函数,又防止引用类型数据被意外共享。
构造函数负责初始化独有属性
每个实例需要独立拥有的数据(如 name、id、配置项),必须在构造函数中通过 this 显式赋值。尤其是数组、对象等引用类型,若写在原型上会全局共享,极易引发状态污染。
- ✅ 正确:在构造函数内初始化
this.items = []或this.config = { ... } - ❌ 错误:在
Constructor.prototype上定义items: []—— 所有实例共用同一个数组
原型对象承载可共享的方法与默认行为
所有实例通用的行为(如 render()、validate()、toString())应统一挂载到构造函数的 prototype 上。这样只创建一次函数体,所有实例通过原型链调用,内存开销最小。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 方法内部始终用
this.xxx访问实例自有属性,确保行为与数据绑定正确 - 可配合
Object.freeze(Constructor.prototype)防止运行时意外篡改共享逻辑
动态原型模式提升封装性与健壮性
为避免原型被外部重写导致实例失联,推荐使用动态原型模式:首次实例化时检查方法是否存在,不存在则一次性挂载到 prototype,后续不再重复操作。
立即学习“Java免费学习笔记(深入)”;
- 示例:
if (typeof this.sayHello !== 'function') { Person.prototype.sayHello = function() { ... }; } - 优势:构造函数与原型逻辑收拢在一处,不依赖外部手动设置 prototype,也不切断已有实例的原型链
冻结实例 + 缓存优化高频字典类场景
对数据字典、状态枚举等只读结构,可在实例创建后立即 Object.freeze(instance),并结合 Map 按 key 缓存已生成实例,保证单例语义和快速查找。
- 例如:状态码
'SUCCESS'对应的字典项只创建一次,后续直接从 Map 中取 - 实例自身仅存
code、label等字段,getColor()、isFinal()等方法全部来自冻结的原型

















