直接用原型链抽离dom组件公共渲染逻辑,核心是将不变通用行为挂基类原型实现共享,避免副作用并保持实例独立性;关键在挂得准、调得清、修得稳。

直接用原型链抽离 DOM 组件的公共渲染逻辑,核心是把「不变的通用行为」挂到基类原型上,让子类共享,同时避免执行副作用、保留实例独立性。关键不在“写得多”,而在“挂得准、调得清、修得稳”。
用 Object.create 建立干净原型链
别用 Child.prototype = new Parent() —— 它会立即执行父构造函数,可能触发 DOM 初始化或网络请求,污染子类实例。改用:
-
Child.prototype = Object.create(Parent.prototype):只继承方法和默认配置,不运行初始化逻辑 - 紧接着补上
Child.prototype.constructor = Child:修复 constructor 指向,否则instanceof判断和调试器里会显示错误类型 - 子类构造函数中显式调用
Parent.call(this, config):继承实例属性(比如this.el、this.config),再设置自身特有字段
把渲染逻辑分层挂载到原型
配置不是全量拷贝进每个实例,而是按语义分三级挂到原型链上,实现“写一次、多处生效”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
全局不变项(如
theme: 'dark'、useTransition: true)——放在基类原型上,所有子类自动继承,改一处全更新 -
可选覆盖项(如
renderHeader()、getTemplate())——基类提供默认实现(返回空字符串或基础 HTML 片段),子类只需重赋值函数即可定制 -
强制实现项(如
initData()、bindEvents())——基类方法体内直接throw new Error('必须实现 initData'),运行时明确报错,不靠文档提醒
render() 骨架 + 显式钩子合并
基类定义 render() 的固定流程骨架,不写具体 DOM 操作,而是留出可插拔钩子:
-
beforeRender()和afterRender():供子类插入前置准备或后置绑定逻辑 -
update(config)方法统一做深合并(用Object.assign或轻量 merge 工具),只更新变化字段,不重置整个配置对象 - 真实 DOM 渲染交给子类实现的
getTemplate()和mount(el),基类只负责调用顺序与生命周期协调
避免 DOM 访问性能陷阱
原型上共享的是逻辑,不是 DOM 引用。每个实例必须持有自己的 this.el 或 this.$root:
- 基类不操作具体 DOM 节点,只提供
createEl(tag, attrs)、append(child)这类工具方法 - 子类在
init()中创建并缓存自己的根节点,后续所有操作基于该实例引用,防止跨实例误操作 - 销毁时统一走
destroy()入口,清理事件监听、定时器、DOM 引用,避免内存泄漏
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










