前置知识

  • 所有对象都是通过new 函数创建的(除了Function这个构造函数对象)
  • 所有的函数也是对象
    • 函数中可以有属性
  • 所有对象都是引用类型

原型对象

所有函数都有一个属性: prototype称之为函数原型

默认情况下,prototype是一个普通的Object对象

默认情况下,prototype中有一个constructor,他也是一个对象,它指向构造函数本身

隐式原型__proto__

所有的对象都有一个属性__proto__,称之为隐式原型.

默认情况下,隐式原型指向创建该对象的的构造函数的原型(prototype)

当访问一个对象的成员时:

  1. 看该对象自身是否拥有该成员,如果有,直接使用
  2. 看该对象的隐式原型是否拥有该成员,如果有,直接使用
  3. 在原型链中依次查找

猴子补丁: 在函数原型中加入成员,以增强对象作用,但会导致原型污染,使用需要谨慎.

原型链

  1. Function这个构造函数的隐式原型就是他的原型对象(Function.__proto__ === Function.prototype)