1.每一个函数数据类型的值都有一个天生自带的属性:prototype,这个属性的属性值是一个对象(“用来存储实例公用属性和方法”)

    • 普通函数
    • 类(自定义类和内置类0

    2.在prototype这个对象中,有一个天生自带的属性: constructor ,这个属性存储的是当前函数本身

    1. Fn.prototype.constructor == Fn; //true

    3.每一个对象数据类型的值,也有一个天生自带的属性:proto,这个属性指向所属类的prototype

    • 普通对象,数组,正则,日期,类数组等等
    • 实例也是对象数据类型的值
    • 函数的原型prototype
    • 函数也是对象数据类型的值

    image.png
    原型链查找机制
    1.先找自己的私有的属性,有则调用,没有则继续找
    2.基于prototype找所属类原型上的方法(Fn.prototype),如果还没有,则继续基于prototype往上找,一直找打Object.prototype为止
    image.png