JavaScript的面向对象机制基于原型链实现,通过[[Prototype]]委托查找属性和方法,实现共享复用、动态更新与内存节省;class语法糖底层仍操作原型链,所有内置对象均统一继承自Object.prototype。

因为 JavaScript 没有传统意义上的“类继承”,它的面向对象机制完全建立在对象之间的委托关系上——而这个委托关系,就是通过原型链实现的。
原型链承载了属性和方法的共享逻辑
每个函数(构造函数)都有 prototype 属性,它指向一个对象;每个实例对象都有内部属性 [[Prototype]](可通过 __proto__ 或 Object.getPrototypeOf() 访问),指向其构造函数的 prototype。当访问一个实例的属性或方法时,JS 引擎先查自身,再顺着 [[Prototype]] 一层层向上查找,直到 Object.prototype,最后到 null。这种“找不到就往上问”的机制,就是共享与复用的底层依据。
- 避免重复定义:100 个实例共用同一个
sayHi方法,而不是各自存一份 - 动态生效:修改原型上的方法,所有已有实例立即获得更新
- 节省内存:方法只在原型对象中存储一次
原型链是 JS 继承的唯一本质路径
ES6 的 class 和 extends 是语法糖,编译后仍靠改写原型链来工作。比如:
-
Child.prototype = Object.create(Parent.prototype)或new Parent(),让子类原型链接到父类原型 -
Child.prototype.constructor需手动修复,否则会指向Parent -
super()在 class 中实际是在初始化时调用父类构造函数,并绑定this
没有原型链,就没有继承;没有继承,就没有多态和可扩展的对象模型。
立即学习“Java免费学习笔记(深入)”;
所有内置对象都遵循同一套原型链规则
数组、函数、日期、正则等,都是对象,它们的原型最终都连到 Object.prototype:
[].__proto__ === Array.prototypeArray.prototype.__proto__ === Object.prototypeObject.prototype.__proto__ === null
这说明 JS 的整个对象体系是统一、自洽的——理解原型链,就等于看懂了 JS 对象从何而来、如何协作、怎样扩展。
不复杂但容易忽略:它不是一种“可选特性”,而是 JS 运行时查找属性的默认行为。绕过它,就绕过了 JS 最根本的对象交互方式。


















