原型链实现轻量模块化核心是复用而非复制:方法挂prototype供实例共享,构造函数只初始化专属状态;支持Object.create委托派生、WeakMap管理外部状态,避免内存泄漏与原型污染。

直接用原型链实现轻量级模块化,核心是复用而非复制——把通用方法挂到原型上,实例只存差异化数据,不重复创建函数,内存开销极小。
把方法定义在 prototype 上
所有实例共享同一份方法,避免每次 new 都分配新函数对象。 比如一个基础状态机模块: ```js function StateMachine() {} StateMachine.prototype.transition = function(to, context) { // 公共流转逻辑 }; StateMachine.prototype.reset = function() { this.state = 'idle'; }; ``` 后续创建 `new StateMachine()` 时,`transition` 和 `reset` 都从原型链查找,不占用额外内存。这样做的关键点:
- 构造函数只初始化实例专属状态(如 this.state、this.id),不放业务逻辑
- 所有可复用的行为统一写在 prototype 上
- 插件或扩展也可通过 Object.assign(StateMachine.prototype, plugin) 注入
用 Object.create 做轻量派生
需要多个行为相似但配置不同的模块变体时,不用 new 多个类,改用原型委托: ```js const baseSM = { timeout: 3000, transition(to, ctx) { /* 默认逻辑 */ } }; const fastSM = Object.create(baseSM); fastSM.timeout = 500; // 只覆盖差异字段 ``` `fastSM` 没有自己定义 `transition`,调用时自动沿原型链找到 `baseSM` 上的方法。这种模式特别适合:
- 高频创建/销毁的场景(如每帧更新的状态管理器)
- 配置驱动的工具类(不同校验规则、不同重试策略)
- 避免闭包捕获导致的内存滞留
配合 WeakMap 管理外部状态
原型上的方法不保存上下文,运行时传入临时数据: ```js StateMachine.prototype.handleEvent = function(event, data) { // data 是本次调用的临时上下文,不存 this 上 if (this.isValid(data)) { this.emit('processed', data); } }; ``` 真正需要持久化的业务数据(如用户 token、表单值)用 WeakMap 关联,确保垃圾回收不受阻: ```js const stateMap = new WeakMap(); stateMap.set(instance, { userId: 123, lastAction: 'submit' }); ```避免污染原型链的陷阱
不是所有对象都适合直接扩展 prototype:
- 尽量不修改原生对象(如 Array.prototype)——易引发冲突
- 自定义构造函数的 prototype 要清晰隔离,避免和第三方库交叉影响
- 方法中慎用 this.constructor,它可能被子类覆盖,优先用显式引用

















