javascript原型继承是语言底层的对象委托机制,天然适合轻量、动态、共享行为的场景;方法复用挂载于prototype避免重复创建,但引用类型易引发共享问题;class本质仍是原型继承,支持构建可扩展对象层级与运行时动态增强。

JavaScript原型继承不是“模拟类”的权宜之计,而是语言底层的对象委托机制。它天然适合需要轻量、动态、共享行为的场景,而不是强行套用类式思维。
方法复用与内存优化
把通用方法挂载在构造函数的 prototype 上,所有实例共享同一份函数体,避免重复创建。
- 比如为多个用户实例共用
toString()、isValid()等校验或格式化方法 - 不推荐在
prototype上放对象、数组等引用类型——否则所有实例会意外共享同一份数据 - 现代写法中,
class的方法默认就定义在原型上,本质仍是原型继承
构建可扩展的对象层级
通过修改原型链,让子类型自然获得父类型的属性和方法,无需复制逻辑。
- 常见于 UI 组件体系:Button → IconButton → LoadingButton,逐层增强能力
- 使用
Object.create(Parent.prototype)设置子类原型,比直接new Parent()更安全(避免执行父构造函数) - 配合
constructor重置,保证实例能正确识别自身类型
运行时动态增强内置类型
在原型上添加方法,让所有对应类型实例立即可用,属于“无侵入式扩展”。
- 例如给
Array.prototype添加.chunk(n),之后所有数组都能调用 - 注意命名冲突风险,生产环境建议用 Symbol 或加前缀(如
myChunk) - 不能用于冻结对象(
Object.freeze(Array.prototype)后不可写)
轻量级对象委托与配置继承
不依赖构造函数,仅用普通对象作为“原型模板”,通过 Object.create() 创建委托实例。
- 适合配置对象复用:一个基础配置对象,派生出 dev / prod / test 多个变体
- 游戏开发中常用于实体(entity)系统:基础 entity → player → enemy,共享通用行为
- 比深拷贝节省内存,又比 class 更灵活,适合数据驱动场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











