对象的原型与原型链
2024年11月7日大约 2 分钟
对象的原型与原型链
原型
在 JavaScript 中,每个对象都拥有一个特殊的属性prototype,这个属性被称为原型。
当试图访问一个对象的属性时,不仅仅会在该对象上搜索,还会在该对象的原型上搜索,
以及该对象原型的原型,依次向上,直到命中属性或者到达顶部。
原型链
在 JavaScript 中原型也是一个对象,所以原型也拥有原型。这个依次向上形成的链路就被称为原型链。
原型链与原型解决的问题
- 继承问题: 在 JavaScript 中允许通过原型继承另一个对象上的属性和方法.
- 复用问题: 通过共享原型实现对象的复用,而不用复制对象,造成代码冗余。
缺点
原型污染: 如果修改顶层对象的原型的话,会给所有继承的后代带来意外的错误。
性能问题:在多层原型链场景下,属性查找开销通常高于直接访问对象自身属性。
概念混淆
背景
「对象的原型与原型链」属于对象模型基础主题,理解深度直接影响复杂调试与框架源码阅读效率。
核心原理
对象访问基于原型链查找,实例创建依赖构造流程与 this 绑定规则。
实现方式 / 示例
建议配套给出“标准场景 + 反例场景”,验证原型遮蔽、返回对象、跨上下文 instanceof 的差异。
常见问题
- prototype 与 proto 概念混用。
- 忽视 constructor 返回值规则。
- 在多运行时上下文中误用实例判断。
最佳实践
在知识文档中显式标注边界行为与替代判断方法,避免经验化误导。
总结
围绕「对象的原型与原型链」的掌握程度决定了你对 JS 对象行为的可预测性。
