原型
在了解原型链之前,先了解下原型是啥
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种继承方式。
看的起小弟的,帮忙点点关注和给个赞哦,码下来不容易呀。