原型链通过委托查找与运行时修改原型实现热更新,实例只存状态、方法统一挂载原型,修改原型方法即全局生效,支持多级原型分层更新且需保持原型纯净。

原型链本身不提供热更新能力,但它的委托查找机制,配合运行时原型修改,能让方法集合天然支持热更新——关键不是“替换方法”,而是让所有实例实时读取原型上的最新逻辑。
只存差异,共性挂原型
方法集合不应在每个实例上重复定义,而应统一放在原型对象里。实例自身不保存方法,只保留配置或状态数据:
- 创建一个空对象作为共享原型,比如 sharedMethods = {}
- 所有组件实例通过 Object.create(sharedMethods) 创建,自身只设 id、data 等个性化字段
- 调用 instance.handleClick() 时,引擎自动沿原型链向上找到 sharedMethods.handleClick
运行时改原型,全局立即生效
因为所有实例都委托查找同一原型,所以只需更新原型上的方法,所有未覆盖该方法的实例立刻获得新行为:
- 切换主题逻辑?直接赋值 sharedMethods.render = newRenderFn
- 修复某个计算 bug?重写 sharedMethods.calculate = fixedCalc
- 已手动在某个实例上设置 instance.calculate = customCalc 的,不受影响,优先级更高
多级原型链支撑按类型热更新
当方法需按组件类型分层定制时,可用多级原型链隔离变更范围:
- 先建基础方法集 baseProto(含 init、destroy)
- 再用 Object.create(baseProto) 得到 chartProto,覆盖 render 和 resize
- 最后基于 chartProto 创建具体图表实例
- 只更新 chartProto.render,不影响其他类型组件;只更新 baseProto.init,所有子类自动获得新初始化逻辑
避免污染,保持原型链干净
热更新依赖原型的纯净性,必须防止意外共享或覆盖:
- 不用 new Parent() 设置子原型,避免执行构造函数副作用
- 每次更新前,确认目标原型是预期对象,比如 if (targetProto === sharedMethods) { ... }
- 对 getter/setter 或不可枚举方法,用 Object.defineProperty 显式定义,确保语义不丢失











