美文网首页互联网科技让前端飞Web前端之路
前端开发,必知ES5、ES6的7种继承

前端开发,必知ES5、ES6的7种继承

作者: 程序员的青春 | 来源:发表于2020-05-27 10:36 被阅读0次

众所周知,在ES6之前,前端是不存在类的语法糖,所以不能像其他语言一样用extends关键字就搞定继承关系,需要一些额外的方法来实现继承。下面就介绍一些常用的方法,红宝书已经概括的十分全面了,所以本文基本就是对红宝书继承篇章的笔记和梳理。

原型链继承

原型链继承缺点:

每个实例对引用类型属性的修改都会被其他的实例共享

在创建Child实例的时候,无法向Parent传参。这样就会使Child实例没法自定义自己的属性(名字)

借用构造函数(经典继承)

优点:

解决了每个实例对引用类型属性的修改都会被其他的实例共享的问题

子类可以向父类传参

缺点:

无法复用父类的公共函数

每次子类构造实例都得执行一次父类函数

组合式继承(原型链继承和借用构造函数合并)

优点:

解决了每个实例对引用类型属性的修改都会被其他的实例共享的问题

子类可以向父类传参

可实现父类方法复用

缺点:

需执行两次父类构造函数,第一次是Child.prototype = new Parent(),第二次是Parent.call(this, name)造成不必要的浪费

原型式继承

复制传入的对象到创建对象的原型上,从而实现继承

缺点: 同原型链继承一样,每个实例对引用类型属性的修改都会被其他的实例共享

寄生式继承

我们可以使用Object.create来代替上述createObj的实现,原理基本上是一样的。寄生式继承其实就是在createObj的内部以某种形式来增强对象(这里的增强可以理解为添加对象的方法),最后返回增强之后的对象。

通过createEnhanceObj就可以在创建对象的时候,把对象方法也通过此种方式继承。缺点: 同借用构造函数一样,无法复用父类函数,每次创建对象都会创建一遍方法

寄生组合式继承

不需要为了子类的原型而多new了一次父类的构造函数,如Child.prototype = new Parent() 只需要复制父类原型的一个副本给子类原型即可

优点: 不必为了指定子类型的原型而调用父类型的构造函数

ES6继承

ES6支持通过类来实现继承,方法比较简单,代码如下

小编也在前端混了有几年,整理了一些学习资料,对web开发技术感兴趣的同学 欢迎加入新建的Q群:603985993,不管你是小白还是大牛我都欢迎,希望大家诚心交流! 还有大牛整理的一套高效率学习路线和教程与您免费分享,与企业需求同步。 好友都在里面学习交流,每天都会有大牛定时讲解前端技术!

相关文章

  • 前端开发,必知ES5、ES6的7种继承

    众所周知,在ES6之前,前端是不存在类的语法糖,所以不能像其他语言一样用extends关键字就搞定继承关系,需要一...

  • 构造函数

    es5 es6 继承

  • JavaScript的多态和封装

    在之前的文章中我们已经介绍了JavaScript的继承包含了ES5和ES6的版本。 ES5继承 传送门 ES6继承...

  • es5 es6静态方法、类、单例模式

    es5中的类和静态方法 es5继承 es6中的类 es6里面的继承 es6里面的静态方法 es6单例模式 转载:h...

  • ES5 和 ES6 继承比较:

    ES5构造函数和继承: ES6构造函数和继承:

  • 用ES5和ES6实现继承

    ES5 prototype实现继承 ES6 写法

  • 继承方式

    es6的继承: es6的继承写法简洁方便,十分直观。 es5的继承:(只推荐组合继承--最常用) 组合继承 除了S...

  • JS 继承的两种写法

    ES5 ES6 两种方法都能实现继承,本质上ES6继承是ES5继承的语法糖,会更简单些,但是假如要添加一个非函数的...

  • 前端常见面试题(八)@郝晨光

    ES5/ES6 的继承除了写法以外还有什么区别? ES5寄生组合式继承(只是列举一个方法,ES5继承还有很多实现方...

  • JavaScript的继承

    前言 忘了整理的理一理。 ES5继承 先不涉及ES6的继承,后面会涉及。这里主要是ES5的继承: 原型链继承 构造...

网友评论

    本文标题:前端开发,必知ES5、ES6的7种继承

    本文链接:https://www.haomeiwen.com/subject/bgoiahtx.html