一、原型链定义
每个对象身上都有隐式原型__proto__属性,其指向创建该对象的构造函数的原型prototype,又因为prototype本身也是对象,它也有隐式原型__proto__,指向规则与上面一致;所以这样一来,从某个对象身上出发,依次寻找隐式原型的指向,将形成一个链条,该链条即是原型链。
二、对象基础知识
1.所有对象都是通过new 函数()创建的,该函数为构造函数
2.构造函数也是一个对象,其是通过new Function()创建的
3.对象赋值给变量,变量中存储的是对象所在的地址,该地址指向对象所在内存
4.原型prototype
其本质为一个对象
(1)所有构造函数都有原型属性prototype
(2)默认情况下,prototype为一个Object对象
(3)prototype中默认有一个属性:constructor,该属性指向构造函数本身
5.隐式原型 __proto__
(1)所有对象身上都有一个属性:__proto__
(2)隐式原型是一个对象,指向创建该对象的构造函数的原型__proto__
(3)在查找一个对象成员时,若对象本身没有,则会到隐式原型中寻找
三、原型与隐式原型出现原因
出现隐式原型与原型的根本原因:js中没有记录类型的元数据,所以js只能通过对象的隐式原型找到创建它的构造函数的原型,从而确定它的类型。
***所有构造函数的隐式原型都指向Function的原型
***所有函数原型的隐式原型,都指向Object的原型
四、原型链全貌如下图