JS原型链

173 阅读1分钟

前言

总结一下JS原型链相关的一些知识。大致分为以下内容

  1. 原型、隐式原型、constructor之间的关系
  2. 何为原型链
  3. 原型链的终点
  4. Object的特殊性
  5. Function的特殊性

栗子🌰

Person = funciton(){}
p = new Person()

1. 原型prototype、隐式原型__proto__、constructor之间的关系

未命名文件.png

  1. 实例对象的隐式原型等于其创建它的构造函数的原型
  2. 构造函数的原型对象的constructor指向该构造函数
    Person.prototype.constructor === Person
    p.__proto__ === Person.prototype 

2. 何为原型链

未命名文件 (1).png

  • 实例对象通过__proto__一路向上找,只到找到null所形成的链条称为原型链 p --> Person.prototype --> Object.Prototype --> null

Person --> Function.prototype --> Object.Prototype --> null

3. 原型链的终点

原型链的的终点均为null,次终点为Object.prototype。可以理解为Object.prototype创造了js的一切

完整原型链图

未命名文件 (2).png

4. Object的特殊性

  1. Object的原型是原型链的次终点
  2. Object构造函数是由Function创建的
Object.__proto__.constructor === Function
Object.__proto__ === Function.prototype

5. Function的特殊性

  1. Function是Function自己创建的
Function.__proto__.constructor === Function
Function.__proto__ === Function.prototype
  1. Function的原型是由Object的原型创建的
Function.prototype.__proto__ === Object.prototype
  1. Funtion的原型创建了诸多构造函数(Object、Funtion、String、Array、Number)