返回知识详解
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上的属性会立即反映到所有已创建的实例,因为它们共享同一个原型对象