欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript知识梳理[三] 原型和原型链

程序员文章站 2022-03-20 23:26:15
脑子好似浆糊...

最早开发Android 时熟悉的是JAVA ,JAVA 是 基于类的,而JavaScript 是 基于原型的语言,对原型和原型链的理解在JS的学习中尤为重要。

什么是原型(prototype)?

prototype 是 给其他对象提供共享属性的对象,由此可见prototype 也是对象,只是在这里承担了给其他独享提供共享属性的职能。

每个对象都有一个原型对象,对象以原型为模板从原型继承方法和属性,而这些方法和属性定义在对象的构造器函数的prototype 属性上,而不是对象实例本身。

JavaScript知识梳理[三] 原型和原型链JavaScript知识梳理[三] 原型和原型链

构造函数Person 有一个指向原型的指针,Person.prototype 有一个指向构造函数Person.prototype.constructor 的指针 ,所以构造函数和原型的关系如上图,属于相互引用。实例对象的原型获取通过__proto__ ,__proto__ 是每个实例都有的属性,而prototype 是构造函数的属性,但是两个的指向是一样的都是指向了对象的原型。

JavaScript知识梳理[三] 原型和原型链

 

总结:原型是指为其他对象提供共享属性访问的对象,在创建对象时,每个对象想都包含一个隐式引用指向他的原型对象或者null,原型也是对象,他也有自己的原型,进而可以形成原型链。

原型链(prototype chain)是什么?

每个对象都有一个原型,通过__proto__指针指向上一层的原型,并从中继承方法和属性,同时原型对象也拥有原型,这样一层一层嵌套,最终指向null,这种关系被称为原型链.

每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( __proto__ ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。引自 MDN 继承与原型链

用我没有天赋的手画一画 凑合看吧 想加个表情

JavaScript知识梳理[三] 原型和原型链

 

了解原型和原型链有什么用?

在基本了解了原型和原型链之后,如果没有实际的运用可能体会不到其作用,但是毕竟JavaScript 是基于原型的所以他的作用体会在方方面面。

在使用vue 框架开发的时候,你是否有定义过全局的方法,是不是挂载到了Vue 实例的 prototype 原型上;

当你想对一个对象的方法做扩展的时候是不是使用了继承,这样原来的方法可以使用,同时可以扩展出自己的方法;

在开发中,你是不是不知不觉已经使用了本不是自己定义的一些方法呢,因为那些是Object 对象的方法,为什么能用;

本文地址:https://blog.csdn.net/Sandy_zhi/article/details/107448540