纳尼,原型链是什么玩意儿!?

111 阅读2分钟

原型

在了解原型链之前,先了解下原型是啥

Js语言没有类和实例(es6之前),不能像java一样实现继承,但是咱们js有对象呀!!双11还能new一个对象出来嘿嘿,因此可以理解成js的继承是基于对象的,而函数也是对象。

那原型又是什么呢,原型其实就是prototype的译文,那prototype又是什么。

玩过Js的都知道,Js有一种函数,很特殊,叫做构造函数。

构造函数

是为了创建一个自定义类,并且创建这个类的实例的这样一个函数,你可以理解为Js的爸爸特意造出来的。

那有什么特征呢

a.函数习惯上首字母大写

b.使用new关键字来调用

c.构造函数执行一次就会创建一个新的方法,执行10000次就会创建10000个新的方法,而10000个方法都是一摸一样的,为什么不把这个方法单独放到一个地方,并让所有的实例都可以访问到呢?这就需要原型(prototype)

并且每个构造函数new出来后会发现,咦,有prototype属性。

然后我们再看prototype是不是有个constructor,constructor指向的是一个函数,这里是指向自己LoveJs这个函数,当然现在看这个属性没有意义,点进去就是死循环。

因为指向的是本身,但是我们主要还是要去研究原型链,竟然有个链,说明是很多函数关联到一起,像糖葫芦一样,有交集,用火影的话来说就是,各个函数之间要有羁绊嘿嘿。

既然prototype没办法找出线索,那我们来看看另一个属性, proto 试试。

发现 proto, 指向的就是Object,可以暂时找出一个关系就是LoveJs的 proto 指向了大boss,Object。

注意这里指向的是Object.prototype,看我下图代码就清楚了

但是这只能看的出LoveJs和Object之间的关系,哪来的链,拿来的羁绊!!

所以Js的爸爸特意创造出了new关键字,那咱们试试

yoke(羁绊)是demo的实例,这关系又出来了如下图

这就是原型链,实例跟构造函数之间的关系,以及构造函数跟Object元老之间的关系,我们这里可以把LoveJs.prototype和Object.prototype看成两个封闭的个体,而这里说的羁绊就是通过 proto 链接起来的,如果是2个个体以上也是这样互通互联,这里就不举例了,下一篇文章介绍下原型链的6种继承方式。

看的起小弟的,帮忙点点关注和给个赞哦,码下来不容易呀。