image-20220402213305595

理解原型链需要首先理解三个属性,prototype,_proto_,constructor。

1.prototype
prototype属性可以看成是一块特殊的存储空间,是函数的独有属性,指向函数的原型对象,同时这个原型对象也是函数创造的所有实例的原型对象的,prototype设计之初就是为了实现继承,让由特定函数创建的所有实例共享属性和方法

Parent.prototype.name = "我是原型属性,所有实例都可以读取到我";
  1. _proto_属性
    _proto_属性是对象的属性,指向自己的原型对象
p1.__proto__ === Parent.prototype; // true
Parent.prototype.__proto__ === Object.prototype; //true

在调用函数的属性或者是方法时,利用的就是这个属性,首先查找这个对象有没有该属性,如果没有则向上调用他的_proto_对象查找,直到找到为止

3.constructor
这个是对象的特有属性,指向构造他的函数,例如p1指向parent()函数,同时因为函数本身也是对象,所以函数的constructor属性会指向function()函数

原型对象(构造函数prototype的指向或者是实例__proto__属性的指向)是一个对象,里面包含constructor和__proto__属性

 Function.prototype = {
        constructor : Function,
        __proto__ : parent prototype,
        some prototype properties: ...
    };