论js中的原型与原型链

发布于:2023-01-04 ⋅ 阅读:(441) ⋅ 点赞:(0)

        事先说明本人时才学JS的小白,或许有许多不懂或者理解错误的地方,欢迎大家指正。

一、JS中的原型

        首先我们来谈谈JS中的原型。

在JS中,原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数 产生的对象,可以继承该原型的属性和方法。

同时原型也是对象,它也是由构造函数产生的,它也有自己的原型对象,那就是Object的原型对象。

那么问题来了,Object的原型对象也是对象,那么它的原型对象是谁呢?答案是null。

那function函数呢?函数是由函数对象所构造的,它的顶层没有人构造它是自己构造了自己。

二、JS中的原型链

        在了解过原型对象之后我们在来看看原型链。

首先,原型链是怎么形成的。

在了解之前让我来简单的介绍一下有关的属性,比如__proto__,constructor,prototype。

        __proto__:被构造出来的对象上的属性,指向它的原型对象。

        constructor:原型对象上的属性,指向构造函数。

        prototype:构造函数上的属性,指向原型对象。

上面三个属性的关系(课件所用图,稍微改了一点)

         

        正式因为有了上面的三个属性才会一环扣一环的形成我们的原型链。

        那原型链有什么作用吗?原型链的作用就是继承,为了让一些对象或者函数拥有共有的属性和方法。

如果稍微对原型链进行一个分类,可以简单的分为原型对象链和原型函数链

        原型对象链就上面图片里那样的,但是函数中其实也含有__proto__属性的,那么它所指向的就是函数对象(也就是Function.prototype),而这个函数对象由于它是一个对象,那么它里面中也会含有constructor和__proto__属性,分别指向顶层的函数(也就是Function())和对象的原型对象(也就是Object.prototype),顶层的函数由于其他的函数能构造它,他是自己构造自己的,所以顶层函数中的prototype和__proto__都指向函数对象(function.prototype),这就是原型函数链。

最后附上我画的一个简易的可能看着有点混乱的图,红线可以简单的认为是原型对象链中的,黑线是原型函数链中的,其实可以从我的图中看到二者是关联在一起的。

 


网站公告

今日签到

点亮在社区的每一天
去签到