什么是原型链?
每一个对象都有自己的原型对象,而原型对象也属于对象也会有自己的原型对象,依次类推就会形成链式结构,然后就构成了原型链,所有对象的原型链最终都会指向object.prototype,而最终object.prototype指向null(万物皆对象,万物皆空)。
对象访问原型链的规则
对象访问原型链遵循就近原则。
当对象要找属性或者方法的时候,首先会先找自己本身,如果自身没有就会通过__proto__属性去访问自己的原型对象,如果原型对象也没有,那么原型对象也会通过__proto__属性去访问自身的原型对象,找到终点还没有找到的话,找的是属性就会报undefined的错误,找的是方法就会报XXX is not a function的错误。
原型继承
原型继承是将父元素的实例对象当做子元素构造函数的原型对象。
这么理解起来会很抽象,下面通过一张图来进行理解。(根据这张图应该就好理解什么是原型继承了)
代码理解
// 构造函数
function student(name, age) {
this.name = name
this.age = age
}
// 实例化对象
let s1 = new student('张三', 18)
// 子元素通过自己的原型对象的原型和父元素(object)的原型对象对比
// 如果相等就代表他们指向的是同一个原型对象
console.log(s1.__proto__.__proto__ === Object.prototype)//true
// 子元素通过自己原型的原型去找自己的父元素
console.log(s1.__proto__.__proto__.constructor)//object