广告
返回顶部
首页 > 资讯 > 前端开发 > html >JavaScript中继承的优缺点有哪些
  • 885
分享到

JavaScript中继承的优缺点有哪些

2024-04-02 19:04:59 885人浏览 独家记忆
摘要

这篇文章给大家分享的是有关javascript中继承的优缺点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本文讲解JavaScript各种继承方式和优缺点。但是注意:这篇文

这篇文章给大家分享的是有关javascript中继承的优缺点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

本文讲解JavaScript各种继承方式和优缺点。

但是注意:

这篇文章更像是笔记,哎,再让我感叹一句:《JavaScript高级程序设计》写得真是太好了!

1、原型链继承

function Parent () {      this.name = 'kevin';  }  Parent.prototype.getName = function () {      console.log(this.name);  }  function Child () {  }  Child.prototype = new Parent();   var child1 = new Child();  console.log(child1.getName()) // kevin

问题:

1、引用类型的属性被所有实例共享,举个例子:

function Parent () {      this.names = ['kevin', 'daisy'];  }  function Child () {  }  Child.prototype = new Parent();  var child1 = new Child();  child1.names.push('yayu');  console.log(child1.names); // ["kevin", "daisy", "yayu"]  var child2 = new Child();  console.log(child2.names); // ["kevin", "daisy", "yayu"]

2、在创建 Child 的实例时,不能向Parent传参

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

function Parent () {      this.names = ['kevin', 'daisy'];  }  function Child () {      Parent.call(this);  }  var child1 = new Child();  child1.names.push('yayu');  console.log(child1.names); // ["kevin", "daisy", "yayu"]  var child2 = new Child();  console.log(child2.names); // ["kevin", "daisy"]

优点:

1、避免了引用类型的属性被所有实例共享

2、可以在 Child 中向 Parent 传参

举个例子:

function Parent (name) {      this.name = name;  }  function Child (name) {      Parent.call(this, name);  }  var child1 = new Child('kevin');  console.log(child1.name); // kevin  var child2 = new Child('daisy');  console.log(child2.name); // daisy

缺点:

方法都在构造函数中定义,每次创建实例都会创建一遍方法。

3、组合继承

原型链继承和经典继承双剑合璧。

function Parent (name) {      this.name = name;      this.colors = ['red', 'blue', 'green'];  }  Parent.prototype.getName = function () {      console.log(this.name)  }  function Child (name, age) {      Parent.call(this, name);        this.age = age;  }  Child.prototype = new Parent();  ChildChild.prototype.constructor = Child;  var child1 = new Child('kevin', '18');  child1.colors.push('black');  console.log(child1.name); // kevin  console.log(child1.age); // 18  console.log(child1.colors); // ["red", "blue", "green", "black"]  var child2 = new Child('daisy', '20');  console.log(child2.name); // daisy  console.log(child2.age); // 20  console.log(child2.colors); // ["red", "blue", "green"]

优点:融合原型链继承和构造函数的优点,是 JavaScript 中最常用的继承模式。

4、原型式继承

function createObj(o) {      function F(){}      F.prototype = o;      return new F();  }

就是 ES5 Object.create 的模拟实现,将传入的对象作为创建的对象的原型。

缺点:

包含引用类型的属性值始终都会共享相应的值,这点跟原型链继承一样。

var person = {      name: 'kevin',      friends: ['daisy', 'kelly']  }  var person1 = createObj(person);  var person2 = createObj(person);  person1.name = 'person1';  console.log(person2.name); // kevin  person1.firends.push('taylor');  console.log(person2.friends); // ["daisy", "kelly", "taylor"]

注意:修改person1.name的值,person2.name的值并未发生改变,并不是因为person1和person2有独立的 name 值,而是因为person1.name = 'person1',给person1添加了 name 值,并非修改了原型上的 name 值。

5、寄生式继承

创建一个仅用于封装继承过程的函数,该函数在内部以某种形式来做增强对象,最后返回对象。

function createObj (o) {      var clone = Object.create(o);      clone.sayName = function () {          console.log('hi');      }      return clone;  }

缺点:跟借用构造函数模式一样,每次创建对象都会创建一遍方法。

6、寄生组合式继承

为了方便大家阅读,在这里重复一下组合继承的代码:

function Parent (name) {      this.name = name;      this.colors = ['red', 'blue', 'green'];  }  Parent.prototype.getName = function () {      console.log(this.name)  }  function Child (name, age) {      Parent.call(this, name);      this.age = age;  }  Child.prototype = new Parent();  var child1 = new Child('kevin', '18');  console.log(child1)

组合继承最大的缺点是会调用两次父构造函数。

一次是设置子类型实例的原型的时候:

Child.prototype = new Parent();

一次在创建子类型实例的时候:

var child1 = new Child('kevin', '18');

回想下 new 的模拟实现,其实在这句中,我们会执行:

Parent.call(this, name);

在这里,我们又会调用了一次 Parent 构造函数。

所以,在这个例子中,如果我们打印 child1 对象,我们会发现 Child.prototype 和 child1 都有一个属性为colors,属性值为['red', 'blue', 'green']。

那么我们该如何精益求精,避免这一次重复调用呢?

如果我们不使用 Child.prototype = new Parent() ,而是间接的让 Child.prototype 访问到 Parent.prototype 呢?

看看如何实现:

function Parent (name) {      this.name = name;      this.colors = ['red', 'blue', 'green'];  }  Parent.prototype.getName = function () {      console.log(this.name)  }  function Child (name, age) {      Parent.call(this, name);      this.age = age;  }  // 关键的三步  var F = function () {};  F.prototype = Parent.prototype;  Child.prototype = new F();  var child1 = new Child('kevin', '18');  console.log(child1);

最后我们封装一下这个继承方法:

function object(o) {      function F() {}      F.prototype = o;      return new F();  }  function prototype(child, parent) {      var prototype = object(parent.prototype);      prototype.constructor = child;      child.prototype = prototype;  }  // 当我们使用的时候:  prototype(Child, Parent);

引用《JavaScript高级程序设计》中对寄生组合式继承的夸赞就是:

这种方式的高效率体现它只调用了一次 Parent 构造函数,并且因此避免了在 Parent.prototype 上面创建不必要的、多余的属性。与此同时,原型链还能保持不变;因此,还能够正常使用 instanceof 和 isPrototypeOf。开发人员普遍认为寄生组合式继承是引用类型最理想的继承范式。

感谢各位的阅读!关于“JavaScript中继承的优缺点有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: JavaScript中继承的优缺点有哪些

本文链接: https://www.lsjlt.com/news/68010.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中继承的优缺点有哪些
    这篇文章给大家分享的是有关JavaScript中继承的优缺点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本文讲解JavaScript各种继承方式和优缺点。但是注意:这篇文...
    99+
    2022-10-19
  • java继承的优点有哪些
    java中继承的优点有:1.易维护性;1.易维护性;3.调理性;java中继承的优点有以下几点易维护性java中继承可以通过增强一致性来减少模块间的接口和界面,可以增加了程序的易维护性。复用性java中继承可以提供程序的复用功能,可以减小代...
    99+
    2022-10-22
  • Java多继承的优点有哪些
    Java不支持多继承,但是可以通过接口实现多继承的一些优点包括:1. 代码重用:通过多个接口可以在一个类中实现不同的功能,避免了代码...
    99+
    2023-09-14
    Java
  • java中继承的优缺点对比
    这篇文章将为大家详细讲解有关java中继承的优缺点对比,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实...
    99+
    2023-06-14
  • java继承的优缺点是什么
    这篇“java继承的优缺点是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java继承的优缺点是什么”文章吧。1、优点提...
    99+
    2023-06-30
  • JavaScript中的继承模式有哪些
    JavaScript中的继承模式有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一. 原型链继承所谓原型链继承,就是让父类的一个实例作为子...
    99+
    2022-10-19
  • JavaScript中的继承方式有哪些
    这篇文章将为大家详细讲解有关JavaScript中的继承方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。类式继承(构造函数)JS中其实是没有类的概念的,所谓的类也...
    99+
    2022-10-19
  • JavaScript中有哪些继承的方法
    这篇文章将为大家详细讲解有关JavaScript中有哪些继承的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 什么是继承继承: 首先继承是一种关系,类(class)与类之间的关系,J...
    99+
    2023-06-15
  • JavaScript中有哪些继承方式
    这期内容当中小编将会给大家带来有关JavaScript中有哪些继承方式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。原型链首先得要明白什么是原型链,在一篇文章看懂prot...
    99+
    2022-10-19
  • javascript中有哪些继承形式
    本篇文章为大家展示了javascript中有哪些继承形式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Js的继承大体上就是两种:对象冒充、原型方式。这两种方式各有优点和缺陷,这里我先列举出来,再从底...
    99+
    2023-06-14
  • Java的继承有哪些特点
    本篇内容主要讲解“Java的继承有哪些特点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的继承有哪些特点”吧!继承:把多个类相同的内容提取到另外一个类中,然后使用关键字extends来实...
    99+
    2023-06-26
  • PHP继承特点有哪些
    这篇文章主要介绍了PHP继承特点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  定义:PHP继承与其他纯面向对象(从设计之初就完全由面向对象思维支配)编程语...
    99+
    2023-06-06
  • javascript继承的方法有哪些
    这篇文章将为大家详细讲解有关javascript继承的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。javascript继承的6种方法:1、原型链继承,其重点是让新实例的原型等于父类的实例;2、...
    99+
    2023-06-14
  • javascript的继承方式有哪些
    这篇文章主要讲解了“javascript的继承方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript的继承方式有哪些”吧! ...
    99+
    2022-10-19
  • Java继承的知识点有哪些
    今天小编给大家分享一下Java继承的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。继承继承的介绍继承是java面...
    99+
    2023-06-29
  • CSS继承的知识点有哪些
    本篇内容介绍了“CSS继承的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   属性的是否默...
    99+
    2022-10-19
  • JavaScript中有哪些继承的实现方法
    JavaScript中有哪些继承的实现方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JavaScript继承的实现方法:1、利用构造原型模...
    99+
    2022-10-19
  • javascript array数组有哪些优缺点
    JavaScript中的数组(Array)具有以下优点和缺点:优点:1. 灵活性:JavaScript数组可以包含不同类型的数据(字...
    99+
    2023-10-11
    javascript
  • 深入讲解JavaScript之继承的多种方式和优缺点
    目录1.原型链继承2.借用构造函数(经典继承)3.组合继承4.原型式继承5. 寄生式继承6. 寄生组合式继承1.原型链继承 function Parent () { th...
    99+
    2022-11-12
  • 原生Javascript实现继承方式及其优缺点详解
    目录前言原型继承优点缺点 构造函数继承 优点 缺点 组合式继承 寄生式组合继承总结前言 最近在复习javascript的一些基础知识,为开启新的征程做准备。所以开始记录一些自己学习的...
    99+
    2022-11-12
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作