对象构造函数的原型图

Posted 綪﹏誓言

tags:

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

对象的定义其实很广泛,万物皆为对象,我们创建对象一般都是用构造函数来创建的,这里我们来说说构造函数创建对象的原型图把.

这个问题有点抽象,举个例子来说,方便一点:

技术分享

这是我们构造函数,这里我们要结合一张 图来说明就更清楚了,这里我们就用一个实例p1好了,其他两个就不用了.

技术分享

这是构造函数和实例的初始关系,person就是这个构造函数,它里面其实有个属性叫prototype,prototype属性的值也是个对象,而这个对象其实就是称作构造函数的原型对象.到这里那上面那张图里应该要多谢东西了:

技术分享

这个原型对象是有prototype而产生的,那这个原型函数里也有个特殊的属性叫做constructor,它的值其实就是构造函数本身person,原型对象我们也是可以给他加属性的,例如:

技术分享

这样上面原型图有变了:

 技术分享

然而构造函数的实例和原型对象有关系吗?其实也是有关系的.原型对象中的属性是可以被实例共享的,那为什么可以共享呢?因为实例中其实有一个属性叫__proto__.它的值也是原型对象.

技术分享

技术分享

Person.prototype===p1.__proto__  是完全相等的.

因为可以共享,所以这里其实p1.constructor得到就是person构造函数本身,

这里要注意一点,当你要获取一个对象的属性时,第一步会先从自身来找,如果自己的属性中没有,才会从原型对象中接着查找,一直一层一层查找下去.

 

以上是关于对象构造函数的原型图的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript的面向对象

JavaScript oop proto与prototype原型图

构造函数和原型

JS中构造函数、实例、原型对象之间的关系

构造函数和实例对象和原型对象之间的关系

232 constructor构造函数,构造函数实例原型对象的三角关系