- 发布时间
原型链与继承
- 作者

- Name
- wenjuGao
- github
- @Github
MDN:原型链
每个实例对象( object )都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype )。 该原型对象也有一个自己的原型对象( proto ) ,层层向上直到一个对象的原型对象为 null。 根据定义,null 没有原型,并作为这个原型链中的最后一个环节。
几乎所有 javascript 中的对象都是位于原型链顶端的 Object 的实例。
实例.proto => 构造函数.prototype 构造函数.proto => Object.prototype Object.proto => null
https://github.com/mqyqingfeng/Blog/issues/2
function Person() {}
Person.prototype // { constructor: f, __proto__ : Object }
Person.__proto__ // ƒ () { [native code] }
let person = new Person()
person.prototype // undefined
person.__proto__ === Person.prototype // true
person.constructor === Person // true
person === Person.prototype.constructor // true
基于原型链的继承
当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
性能
在原型链上查找属性比较耗时,对性能有副作用,这在性能要求苛刻的情况下很重要。另外,试图访问不存在的属性时会遍历整个原型链。