一,概述
每个对象都有一个一个原型__proto__,这个原型可以形成自己的原型,这样的话会形成一个原型链
二,原型指针
原型指针分别有两个,一个是__proto__ ,一个是prototype,一个是constructor
__proto__ 是原型链查询中实际用到的,它总是指向 prototype,也就是指向构造函数的原型对象,它是对象独有的。
prototype属性,它是函数所独有的,它是从一个函数指向一个对象。它的含义是函数的原型对象,原型对象的意思是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法。
每个函数都有一个原型对象,该原型对象有一个constructor属性,指向创建对象的函数本身;并且所以的势力对象都可以访问constructor属性,constructor属性是创建实例对象的函数的引用。
三,内置对象的原型链
所有内置对象都是一个构造函数(除Math外),每类内置对象都有自己的原型对象(prototype),所有内置对象的API都保存在类型.prototype对象中。
下面如图所示几个重要的内置对象的图
四,总结原型链的相关知识
1, __proto__和constructor属性是对象所独有的,prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性.
2,__proto__属性的作用就是当访问一个对象的属性时,如果该对象内部找不到这个属性,那么就会去它的__proto__属性所指向的那个对象的父集对象里找,一直找,直到__proto__属性的终点null,然后返回undefined,通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链.
3,prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法,constructor属性的含义就是指向该对象的构造函数,所有函数最终的构造函数都指向Function()。