JavaScript 原型链理解

📅 发布时间:2026/7/6 10:34:57 👁️ 浏览次数:
JavaScript 原型链理解
JavaScript 原型链理解在 JavaScript 中原型与原型链是理解继承机制、函数对象关系、实例对象行为最关键的基础。很多开发者在学习原型链时容易混淆“构造函数的 prototype” 与 “实例对象的proto”同时也会对 Function 和 Object 两大内置构造器的特殊性产生迷惑。本文将结合一张清晰的原型链关系图从整体结构到底层机制帮助你系统理解 JavaScript 的原型链。一、三种关键关系在深入原型链图之前我们需要先理解三种不同指向关系它们分别由三类线表示黑色线构造函数 new 出来的实例对象实例对象由构造函数通过new关键字创建黑色线代表这种“实例化关系”。红色线构造函数的 prototype 属性每一个函数包括普通函数和内置构造函数都有 prototype。prototype 是“构造函数 → 原型对象”的一条定向链接。绿色线对象的proto原型链指向任何对象都有一个内部属性[[Prototype]]浏览器中表现为__proto__它形成原型链。绿色线表示“对象 → 上一层原型对象”的关系。这些关系构成了本文中原型链图的基础。二、从顶层开始Function 与 Object 的特殊结构JavaScript 中最特殊的两个构造函数是FunctionObject它们构成了所有对象、函数的顶层模型。1. Function 构造函数的特殊性(1) Function 构造函数 指向 Function.prototype红线Function → Function.prototype(2) Function 构造函数 指向 Object 构造函数黑线:Function → Object因为 Object 也是函数所有的函数都是通过 Function new 出来的。(3) Function 自己的proto也指向 Function.prototype绿色线Function.__proto__ Function.prototype这意味着Function 是所有函数的构造函数同时又是自身的实例。注函数其实也是一个实例对象这是 JavaScript 原型系统的最特别之处。2. Object 构造函数的结构(1) Object → Object.prototype红线Object → Object.prototype(2) Object → A.prototype黑线:Object→A.prototype因为任何对象都是都是通过 Object new出来的而这里的 A.prototype 也是一个对象。(3) Object.prototype.proto为 null绿色线Object.prototype.__proto__ null这是整个原型链的终点。三、普通构造函数 A 的原型结构以一个普通构造函数 A 为例1. 构造函数 A 的 prototype红线A → A.prototype2. A.prototype.proto的上层绿色线A.prototype.__proto__ Object.prototype所有普通构造函数的 prototype 默认都继承自动自 Object.prototype。3. A 的proto绿色线作为一个函数A 本身也是 Function 的实例A.__proto__ Function.prototype四、实例对象 a 的原型链当我们通过new A()创建实例const a new A();会形成两条关键关系1. 实例 a → A黑色线表示 a 是由 A 构造而来。2. 实例 a → A.prototype绿色线a.__proto__ A.prototype此后 a 就能“沿着原型链”向上查找属性。五、整张图的完整解析流程结合文章开头的图我们可以沿着三条线逐层理解整个体系1. 红线prototype表示构造函数自身的 prototypeFunction → Function.prototypeObject → Object.prototypeA → A.prototypeprototype 是构造函数“赋予实例的共享属性”的集合。2. 绿线proto表示某个“对象”的原型链向上查找路径实例 a → A.prototypeA.prototype → Object.prototypeA → Function.prototypeFunction.prototype → Object.prototypeObject.prototype → null每个对象都有proto这形成了“继承链”。3. 黑线实例化表示 new 创建实例A → a构造函数通过 new 生成实例而实例只通过proto继承方法。六、整体关系总结最重要的图式心智模型你可以记住三句话1. 所有函数都是 Function 的实例包括 Function 自己函数.__proto__ Function.prototype2. 所有 prototype 的最终源头都是 Object.prototypexxx.prototype.__proto__ Object.prototype3. Object.prototype 是唯一一个原型链终点Object.prototype.__proto__ null这三条规则奠定了整个 JavaScript 原型链体系。七、为什么理解这张图很重要如果你弄懂了这张图你就能回答所有原型链相关问题为什么函数有 call、apply为什么对象可以使用 toString为什么 Function instanceof Function 为 true为什么 Function instanceof Object 也为 true这些都来自于原型链的结构。八、结语原型链是 JavaScript 继承体系的核心而 Function 与 Object 的双重特殊结构则是整个模型中最值得深入理解的部分。本文基于一张清晰准确的原型链图从顶层关系到实例对象逐级解释 prototype、proto、构造函数三者之间的联系希望能帮助你彻底掌握原型链概念。