返回知识详解
JavaScript 核心

原型与原型链

对象通过 __proto__ 串成链,属性查找沿链上溯——这是 JS 继承的基石。

原型链的查找过程

读取对象属性时,引擎先在对象自身查找;找不到就沿 __proto__ 上溯到原型对象,再到原型的原型……直到 Object.prototype,其 __proto__null,查找结束。

点击下面的「查找属性」按钮,观察查找指针如何沿链逐级上移并高亮命中节点。

可视化演示
f实例对象(new Foo()){ ownName }
↓ __proto__
Foo.prototype构造函数的原型对象{ bar, sayHi }
↓ __proto__
Object.prototype所有对象的顶层原型{ toString, hasOwnProperty }
↓ __proto__
null原型链终点
点击上方任一属性,观察查找如何沿 __proto__ 逐级上溯。

构造函数、prototype 与 instanceof

函数都有一个 prototype 属性,new 出来的实例其 __proto__ 指向该 prototype

  • instanceof 本质是判断某构造函数的 prototype 是否在对象的原型链上
  • 修改 Foo.prototype 上的属性会立即反映到所有已创建的实例,因为它们共享同一个原型对象
学完了?做几道题巩固一下
针对「JavaScript 核心」范围练习