JS--__proto__和prototype的原型链理解

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-29 16:52   1060   0

关键词

1.对象的原型对象Object.prototype

2.函数的原型对象Function.prototype

3.对象的原型对象和对象构造函数的互指关系

4.函数的原型对象和函数构造函数的互指关系

__proto__

每个普通的对象(new Object()产生的)都会带有__proto__隐性属性,这个属性叫做原型对象,一般不可直接使用

个人理解这个属性的作用:

1.体现对象的继承图谱,通过这个属性可以查到他的父类,以此类推可以查到更根部的父类

2.保存有该对象的方法,以及往父类查,可以使用父类或更高父类的方法

3.方便底层查找对象的方法,要么本对象的,要么从该原型对象中往上查找

原型对象的特性:

1.原型对象是个特殊的对象,不带任何非方法属性,只带方法属性(特殊对象)

2.带的方法有constructor和该对象的方法baseFunction

3.obj.__proto__ === Obj.prototype

4.__proto__类型为父类的class,实际是该类的对象(类似多态)

prototype

每个方法都有一个属性prototype,该属性是一个指针,指向该方法的原型,该原型有个constructor的方法,该方法是个指针,指向该方法---一个循环,用这两个方法来回指。

原型链关系

1.obj的__proto__指向该类的prototype(原型对象),可以暂时理解为父类obj.__proto__ === Object.prototype;

2.该原型对象有个constructor属性,该属性指向该类,该属性方法为一个特殊对象,有个属性为prototype,指向该原型对象

3.该原型对象也有一个原型对象__proto__,该原型对象指向Obj.prototype.__proto__===Object.prototype(对象的原型对象

4.如上条所说,对象原型对象有个constructor,指向Object()--对象的构造函数,该constructor为一个特殊对象,有个属性为prototype,指向此时的对象原型对象Object.prototype(下图命名为:对象原型对象和对象构造函数的互指关系

5.如上图可知Object.prottype原型对象也有一个__proto__属性,该属性指向null;

6.如上图所有对象的构造函数Object(),也有一个__proto__属性,该属性指向Function.prototype(函数的原型对象

7.如上条所述,函数的__proto__指向的函数原型对象,简称函数原型对象,该对象有个constructor属性,该属性指向Function()--函数构造函数,该属性为一个特殊对象,该对象有一个属性prototype,指向函数原型对象Funciotn.prototype(下图命名为:函数原型对象和函数构造函数的互指关系

8.如上图所示,函数的构造函数有个__proto__,指向函数的原型对象Funciton.prototype;

总结

9.函数的__proto__都指向函数原型对象Function.prototype

10.沿着原型对象的路线查找,最后的一个原型对象的__proto__(不管是函数原型还是对象原型)都指向对象原型对象Object.prototype

11.constructor和prototype这两货指向的对象相互指,比如1.obj.的原型对象和new该对象的构造函数之间,2.对象的原型对象和对象的构造函数之间,3.函数的原型对象和函数的构造函数之间

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP