简单说明一下原型继承

107 阅读1分钟

继承分为三种 原型链继承、组合式继承、寄生组合式继承。

为什么要有继承呢?举个例子: 如果说定义一个Person人类 而人类下有各种角色,角色有不同的属性,但又会用共同的属性,为了防止每创建一个角色就同时定义相同的属性,所以会使用到继承。

如何实现?

1.原型链继承

46e9cd8d48b17f86664468c8d21e399.jpg 将角色的原型prototype绑上Person的实例,如图所示,这样就可以调用Person的原型对象了

2.组合式继承

但是原型链继承有个很讨厌的地方,就是还得手写基本的属性,如name、age,所以用到了组合式继承

f00ec0ebc843bc4d78bc3c0f775b433.jpg 如图所示,在属性中直接使用父Person(我写成了Name),加上call更改this指向,然后传参就完事 此时就不需要手写基本属性,只需要写不同的地方就好了

3.寄生组合式继承

组合式继承也是有不足的,如图所示

9154f5e41063b10440a0c4f93ec62f0.jpg

7e8af1200dbb6e20cd54946df4ad039.jpg

在这个例子中,我们需要指向Name的原型,所以在object.create(中放入Name.prototype)

40c3e65db62048248f80ae612a5e795.jpg

此时非常干净对吧。

那么讲完了基本的继承,还想说说class类的继承,class的基本用法如下

b1461645ecda61a1b2ffa3d21310b72.jpg

而class的继承也非常简单,只需要class 子 extends 父 {}即可。**那么怎么去把重复的基本属性(name、age)去掉呢?**如图所示,懒得说了

37337ba92e6cc00fe10e64bcba2b210.jpg

6ae78393e67e1df43e6150dac23ed48.jpg