原型以及原型链

191 阅读1分钟

1. 原型

  1. 每个函数都有一个显式原型属性prototype
  2. 每个实例都有一个隐式原型属性__proto__
  3. 实例的__proto__和对应函数的prototype都指向原型对象
  4. 原型对象有个constructor属性指向其构造函数

2. 原型链

  1. 从对象的__proto__开始,连接的所有对象,就是原型链,也叫隐式原型链
  2. 查找对象属性,先找自身,找不到就沿着原型链找,找不到就返回undefined

原型链.jpg

3. 终极原型链

  1. 万物皆对象(除基本类型)
  2. 所有对象都是Object的实例(直接或间接)
  3. 所有函数都是Function的实例(包括Function)
  4. 函数是特殊的对象

终极原型链.jpg

  • Function是一个特殊的对象,他可以扩展属性,包含对象的特性,所以可以推出Function的原型对象上的__proto__隐式原型指向Object的原型对象
  • Function生出了Object,并且Function自身构造了自己,Object的__proto__隐式原型指向Function的原型对象,Function的__proto__隐式原型指向自己的prototype显式原型,也就是所谓的自己生自己,这样的话会形成一个环路死循环,所以原型链设计的时候给Object的原型对象的__proto__隐式原型指向了null,这就是原型链的终点