js中原型和原型链理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中原型和原型链理解相关的知识,希望对你有一定的参考价值。

js中属性的继承以及查找都会用到原型链的知识,对于深入学习js的人来说是一个难点也是一个重点,下面梳理下对于原型以及原型链的理解。

首先,我们要知道什么是原型以及原型链?他们有什么样的作用?

可以理解为JS对象在创建时都会与之关联另一个对象,这就是我们所说的原型,每一个对象都会从原型“继承”属性。下图表示了构造函数与实例原型的关系,其中Object.prototype表示实例原型。

技术分享

那么实例与实例原型又是怎么联系的呢?接下来又要说到另一个属性__proto__,每一个JS对象都有一个属性叫__proto__,这个属性会指向该对象的原型。javascript不希望开发者用到这个属性值,有的低版本浏览器甚至不支持这个属性值。但是可以不用管它可以直接写出来,下图表示了他们的关系:

技术分享

既然对象跟构造函数都可以指向原型,那么原型是否也可以指向构造函数或者实例呢?接下来要说到第三个属性constructor,每个原型的constructor属性指向关联的构造函数。

原型链,其实也就是读取实例的属性时,如果找不到,就会查找与属性相关联的原型中的属性,如果还是查不到就去找原型的原型,直到找到最顶层null为止。整个的流程图可以用下图来表示:

技术分享

最后我们知道,一切皆对象,函数也是对象,函数Function.prototype指向的对象,它的__proto__是不是也指向Object.prototype?

答案是肯定的。因为Function.prototype指向的对象也是一个普通的被Object创建的对象,所以也遵循基本的规则。

 技术分享

本文主要是总结一些别人的文章进行梳理,让自己更加理解这个过程,希望对大家也有所帮助。

 

以上是关于js中原型和原型链理解的主要内容,如果未能解决你的问题,请参考以下文章

js中原型和原型链理解

如何更加简单的理解JS中的原型原型链概念

理解js中是原型链? 如何实现继承?

web前端:理解js原型链

上帝视角一文理解JavaScript原型和原型链

原型和原型链的理解