原型链是javascript对象属性查找的实际路径,通过[[prototype]]逐级委托查找,统一支撑内置对象、构造函数继承及所有继承模式的底层运行。

原型链是 JavaScript 底层对象构建的骨架机制——它不靠“类声明”组织对象关系,而是靠对象内部的 [[Prototype]] 链接逐级委托查找,让属性访问、方法调用、类型继承全部得以成立。
原型链是对象属性查找的实际路径
当你写 obj.method(),JavaScript 并不只在 obj 自身找 method。引擎会按固定顺序执行查找:
- 先检查
obj自身是否拥有该属性或方法 - 如果没有,就通过
obj.__proto__(即[[Prototype]])跳转到它的原型对象 - 继续在原型对象上查找;若仍无,再查该原型的
__proto__ - 如此逐级向上,直到抵达
Object.prototype;它的__proto__是null,查找终止
这个链条就是运行时真实存在的“查找路径”,不是语法约定,而是引擎强制执行的行为规则。
所有内置对象都接入同一条主干链
数组、函数、日期、正则等对象,表面类型不同,底层却共享同一套原型链结构:
-
[]的__proto__→Array.prototype→Object.prototype→null -
function() {}的__proto__→Function.prototype→Object.prototype→null -
{}的__proto__直接指向Object.prototype
这种统一性让 toString()、hasOwnProperty() 等通用方法无需重复实现,也支撑了 instanceof 和 isPrototypeOf() 的判定逻辑。
构造函数只是原型链的“装配入口”
写 function Person() {} 本身并不创建继承关系;真正起作用的是:
- 引擎自动为
Person创建Person.prototype对象 - 调用
new Person()时,新对象的__proto__被设为Person.prototype - 你往
Person.prototype上添加的方法,所有实例都能通过原型链访问到
换句话说,构造函数只是触发原型链连接的“开关”,而 prototype 和 __proto__ 的配对才是链成型的关键。
原型链支撑了 JS 所有继承模式的底层运行
无论是手动设置 Child.prototype = Object.create(Parent.prototype),还是用 class extends,最终都编译/映射为对原型链的修改:
-
class语法糖本质仍是操作prototype和__proto__ -
super()在构造函数中实际是在父类原型上初始化this - 混入(mixin)、寄生组合继承等高级模式,全依赖在链上动态挂载或替换原型节点
没有原型链,就没有真正的对象复用,也就没有现代 JS 框架(如 Vue 的响应式代理、React 的组件实例行为)可依托的运行基础。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











