js继承的实现(es6/es5)

在我们知道继承之前我们要先知道什么是原型,(如果有不知道的可以去看我上篇博客)

在Es6之前,我们实现继承其实还是比较麻烦的(在这里Es6之前我们称为Es5)。

Es5实现继承:

1.构造函数继承:

js继承的实现(es6/es5)

 在上面这段代码中我们就已经实现的构造函数继承。构造函数继承原理是我们利用call方法修改要被继承的构造函数的this指向(当然也可以是用bind进行修改this指向),从而实现继承。我们看一下打印结果:

js继承的实现(es6/es5)

 这里我们可以看到我们成功的继承了函数内的属性但是原型上的方法并没有继承

这里我们可以总结一下:

优点:构造函数继承可以完美继承函数上的属性和方法(并进行传参)

缺点:但不能继承原型上的属性和方法(所以不推荐使用)

2.原型继承:

我们先来看一下实现代码:

js继承的实现(es6/es5)

 从上面代码我们可以看到我们是把被继承的构造函数的实例给了要继承的构造函数的原型

我们一起看一下打印结果:

js继承的实现(es6/es5)

 从上面这张图我们可以看到无论是函数内的属性或方法还是原型上的属性方法我们都成功继承了

我们总结一下:

优点:原型继承可以完美的继承所以属性和方法

缺点:不能给对象上的属性进行传参(不能传参也就相当于没继承,因为继承一个空属性有什么用。不推荐使用)

3.组合继承:

js继承的实现(es6/es5)

 组合继承我们同时用到了原型继承和过构造函数继承(利用两种继承的优点互相弥补缺点)

原型继承的时候我们就可以直接继承被继承构造函数的原型,不需要继承实例

最后把原型中的constructor的指向修改成构造函数本身

看打印结果

js继承的实现(es6/es5)

 从打印结果我们可以看出不但完美继承了属性和方法也可以进行传参

我们总结一下:

优点:组合继承可以完美的继承所以属性和方法并进行传参(推荐使用)

看到这里我相信如果基础不好的可能已经蒙蒙的了,不要紧为了解决继承时的繁琐步骤在Es6中我们是用class类来完成。如果拿Es6的继承跟Es5想比Es6简单的就跟个1一样

说完Es5的继承我们在看一下Es6的继承:

js继承的实现(es6/es5)

在Es6新增了一个class类来进行继承

在class中使用extends进行继承,使用super进行传参

我们来看一下结果: js继承的实现(es6/es5)

 从打印结果我们可以看出已经完美继承了

看到这了是不是感觉Es6比Es5简单的不是一星半点,Es6继承简单的跟一似的

到这里我们的继承就讲完了,如有疑问请留言

上一篇:三、模板字面量之多行字符串


下一篇:class、extends 是什么? 有什么作用