JS之原型链,__proto__和prototype

对于刚刚接触JS的人来说,JS的原型链是有点不容易理解。但是,它绝对没有那么复杂。

一.首先我们需要来认识一下,__proto__和prototype

1. __proto__叫做隐式原型 

  在JS中,每个对象都会有一个内置属性:[[prototype]],目前所有的浏览器都可以通过__proto__属性来访问这个内置属性。但是这并不是一个正式的API,在ES6中,Object.setProtoTypeOf(Object,prototype)被推荐为正式的设置原型对象的方法。

  作用:构成原型链,用于实现基于原型的继承。

2.prototype叫做显式原型

  所有函数在被创建之后,都会有一个prototype属性,它指向函数的原型对象

  作用:用来实现基于原型的继承与属性的共享

3.隐式原型指向创建这个对象的函数(constructor)的prototype

4.__proto__的指向问题:

  __proto__的指向取决于创建的对象的方式

JS之原型链,__proto__和prototypeJS之原型链,__proto__和prototypeJS之原型链,__proto__和prototype

 5.对象的__proto__指向了它的构造函数的原型对象。它的原型对象通过constructor属性指回该对象的构造函数。

  JS之原型链,__proto__和prototype

二.什么是原型链 

由于每个对象都有__proto__属性,而在JS中万物皆对象(一般),所以会形成一条由__proto__连接起来的链。最终向上到null。JS引擎在查找属性时,会在该对象中寻找,如果没有就会通过原型链向上寻找。

JS之原型链,__proto__和prototype

 这就是原型链。

文中图片来源:https://www.cnblogs.com/libin-1/p/5820550.html