原型和原型链

63 阅读2分钟

原型和原型链

原型链示例图

image.png

构造函数

  • 任何函数只要通过new操作符来调用,那么他就可以作为构造函数。

实例

  • 只要是被new关键字调用构造函数所生成的对象就叫对象实例。

原型

  • 所有生成的函数都会有一个prototype原型的属性,这个原型属性指向的是原型对象
    • 原型对象的作用
      • 共享对象的所有属性和方法,该原型有个属性为constructor(构造函数),这个属性指向的是它的构造函数。

__proto__属性

  • 指向原型对象(也可以理解为父对象)

prototype 属性

  1. 是函数独有的
  2. 从一个函数指向一个对象
  3. 用来共享属性和方法
  4. 任何函数创建的时候都会默认同时创建该函数的prototype对象。

constructor属性

  1. 是对象才拥有的属性
  2. 它是从一个对象指向一个函数(该对象的构造函数)
  3. 单从constructor这个属性来讲,只有prototype对象才有。

示例

  • 函数创建的对象.proto === 该函数.prototype
  • 该函数.prototype.constructor===该函数本身

总结

  • 牢记点
    1. __proto__和constructor属性是对象所独有的;prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性。
    2. __proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,然后返回undefined,通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链。
    3. prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法,即f1.proto === Foo.prototype。
    4. constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function。