面向对象(OOP)之原型对象和原型链(js面向对象的底层处理机制)

首先记住三句话

1.每一个类(函数)都具备prototype,并且属性值是一个对象
2.prototype上有内置的属性constructor,值是类(函数)本身
3.每一个对象都具备__proto__,属性值是当前所属类的prototype

类和构造函数是一个概念

接下来,详细讲解一下这三句话
js面向对象的底层处理机制
1 每一个函数数据类型都自带一个属性prototype(原型对象),属性值是一个对象,并且prototype中自带一个属性constructor,属性值是当前函数本身。
此处有例外:箭头函数没有prototype,Function.prototype不是对象。
其中prototype只对内置类(内置构造函数)和构造函数(自定义类)有用,普通函数虽然有prototype,但是没啥用。
适用于:内置类(内置构造函数)、构造函数(自定义类)、普通函数
2.每一个对象数据类型,都天生自带一个属性__proto__,叫做隐式原型(prototype被叫做显式原型),__proto__的另外一个名字叫做原型链。属性值指向构造函数的原型对象prototype。
适用于:普通对象(日期对象,正则对象,数组对象…)/prototype(原型对象)/实例对象/函数
所有的对象都是Object这个内置类的实例,其__proto__都指向Object.prototype

Object的__proto__=null
解释:因为Object.prototype也是Object的实例,所以Object. __proto__要指向的话,就只能指向自己,这就失去了意义,所以基类的原型链为null。

接下来用一个例子画图来囊括以上所有的知识点

面向对象(OOP)之原型对象和原型链(js面向对象的底层处理机制)