广告
返回顶部
首页 > 资讯 > 精选 >原生Javascript如何实现继承
  • 471
分享到

原生Javascript如何实现继承

2023-06-20 16:06:32 471人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关原生javascript如何实现继承,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言最近在复习javascript的一些基础知识,为开启新的征程做准备。所以开始记录一些自己学

这篇文章将为大家详细讲解有关原生javascript如何实现继承,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    前言

    最近在复习javascript的一些基础知识,为开启新的征程做准备。所以开始记录一些自己学习的内容。

    废话少说,上代码!

    首先是我们的父类代码。

    在这里我们创建一个Person的类作为父类,它的构造函数需要2个参数name和age。

    然后我们在它的原型上添加一个sayHi的方法。

    //父类function Person (name, age) {    this.name = name || 'no name';    this.age = age || 0;}Person.prototype.sayHi = function () {    console.log('Hi, I\'m ' + this.name + ' and i\'m ' + this.age + ' years old!');}var p = new Person('A',20);p.sayHi();//Hi, I'm A and i'm 20 years old!

    原型继承

    //原型继承function Teacher(){}Teacher.prototype=new Person('B',22);Teacher.prototype.constructor=Teacher;var t = new Teacher();t.sayHi();//Hi, I'm B and i'm 22 years old!console.log(t instanceof Person);//trueconsole.log(t instanceof Teacher);//true

    优点

    从上面的代码来看,Teacher 的实例拥有了 Person 的属性和方法。并且实例对象既是 Person的实例也是 Teacher的实例。而且这种继承方式特别的简单。

    缺点

    我们可以很容易的就发现Teacher类的 name和 age是固定的,都是name=B和age=22,换句话说就是我们无法实现按照我们的意愿给父类的构造函数传参。并且一个我们不能给一个 Teacher 指定多个原型,也就是没法 多继承。然后我们看下下面这段代码:

    var t1 = new Teacher();var t2 = new Teacher();Teacher.prototype.name = "C";t1.sayHi();//Hi, I'm C and i'm 22 years old!t2.sayHi();//Hi, I'm C and i'm 22 years old!

    上面这段代码中我们可以看到当原型中的属性或者方法被改变时,所有的子类实例的属性和方法也会跟着被改变,也就是原型继承的另一个缺点:所有子类共享同一个原型对象

    这里说到了原型,我很早之前也写过一个关于原型的随笔,不过可能也是有些模糊,现在的理解和当时有所不同,我会在后面重新写一篇关于原型的随笔。(写好了我会附上连接)

    构造函数继承

    //构造函数继承function Teacher (name, age) {    Person.call(this, name, age);}var t1 = new Teacher('B', 22);var t2 = new Teacher('C', 30);console.log(t1.name);//Bconsole.log(t2.name);//Cconsole.log(t1 instanceof Person);//falseconsole.log(t1 instanceof Teacher);//truet1.sayHi();//TypeError: t1.sayHi is not a functiont2.sayHi();//TypeError: t1.sayHi is not a function

    优点

    相对于 原型继承 , 构造函数继承解决了所有的子类实例共享统一原型的问题,也可以给父类的构造函数传参,并且我们可以在子类的构造函数中调用多个父类的构造函数,实现所谓的多继承(这里的多继承是指子类通过call,apply等方法去调用父类的构造函数使其拥有父类的属性和方法,但是js中一个函数对象只存在一个 prototype,所以其实我们没法通过原型链的形式去体现出多继承)

    缺点

    上面的代码中我们可以看出创建的实例只是 子类的实例 并不是 父类的实例 ,不能直观的体现出继承,这种继承方式也无法继承父类的原型上的属性和方法。

    组合式继承

    //组合式继承function Teacher (name, age) {    Person.call(this, name, age);}Teacher.prototype = new Person();Teacher.prototype.constructor = Teacher;var t1 = new Teacher('B', 22);var t2 = new Teacher('C', 30);Teacher.prototype.name = "D";console.log(t1.name);//Bconsole.log(t2.name);//Ct1.sayHi();//Hi, I'm B and i'm 22 years old!t2.sayHi();//Hi, I'm C and i'm 30 years old!console.log(t1 instanceof Person);//trueconsole.log(t1 instanceof Teacher);//true

    组合式继承就是结合了原型继承和构造函数继承的优点,解决了两种方式存在的一些缺点。但是我们会发现每当我们去创建一个子类实例的时候都会去创建一个父类的实例,尽管父类实例不是同一个实例(内存地址不一样),但是他们其实属性和方法上完全一致,所以我们通过下面这种(寄生式组合继承)方式完善它,以避免不必要的实例构造。

    寄生式组合继承

    //寄生式组合继承function Teacher (name, age) {    Person.call(this, name, age);}Teacher.prototype = Object.create(Person.prototype);Teacher.prototype.constructor = Teacher;var t1 = new Teacher('B', 22);var t2 = new Teacher('C', 30);Teacher.prototype.name = "D";console.log(t1.name);//Bconsole.log(t2.name);//Ct1.sayHi();//Hi, I'm B and i'm 22 years old!  t2.sayHi();//Hi, I'm C and i'm 30 years old!console.log(t1 instanceof Person);//trueconsole.log(t1 instanceof Teacher);//true

    上面的方式解决了我们没创建一个子类实例都去创建一个父类实例的问题,这也是最为常用的一种js的继承方式,如果我们通过Babel去把es6中的class的继承转成ES5的代码,我们会发现就是用的寄生式组合继承。

    关于“原生Javascript如何实现继承”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    --结束END--

    本文标题: 原生Javascript如何实现继承

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

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

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

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

    下载Word文档
    猜你喜欢
    • 原生Javascript如何实现继承
      这篇文章将为大家详细讲解有关原生Javascript如何实现继承,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言最近在复习javascript的一些基础知识,为开启新的征程做准备。所以开始记录一些自己学...
      99+
      2023-06-20
    • javascript原型链中如何实现继承
      这篇文章将为大家详细讲解有关javascript原型链中如何实现继承,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:继承的几种方式:① 使用构造函数实现继承fun...
      99+
      2022-10-19
    • JavaScript如何实现寄生式组合继承
      小编给大家分享一下JavaScript如何实现寄生式组合继承,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!寄生式组合继承的实现?...
      99+
      2022-10-19
    • 原生Javascript实现继承方式及其优缺点详解
      目录前言原型继承优点缺点 构造函数继承 优点 缺点 组合式继承 寄生式组合继承总结前言 最近在复习javascript的一些基础知识,为开启新的征程做准备。所以开始记录一些自己学习的...
      99+
      2022-11-12
    • JavaScript如何实现继承的
      JavaScript是一种面向对象的语言,而继承是面向对象编程的一个重要特性。在JavaScript中,继承的实现方式有多种,本文将介绍其中较为常见的几种方法。一、原型链继承原型链继承是JavaScript中最基本的一种继承方式,也是最常用...
      99+
      2023-05-14
    • javascript是如何实现继承的
      本篇内容介绍了“javascript是如何实现继承的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2022-10-19
    • 如何利用JavaScript 实现继承
      目录一、背景简介二、原型对象和对象的关系二、使用 prototype 和 proto 实现继承三、使用prototype和proto实现继承四、通过原型链访问对象的方法和属性五、其他...
      99+
      2022-11-13
    • 怎么在javascript中实现寄生式继承
      今天就跟大家聊聊有关怎么在javascript中实现寄生式继承,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、说明在原型式继承的基础上,增强对象,返回构造函数。函数的主要作用是为构...
      99+
      2023-06-15
    • javascript寄生式组合继承怎么实现
      这篇文章主要讲解了“javascript寄生式组合继承怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript寄生式组合继承怎么实现”吧!说明寄生组合继承通过盗用构造函数继...
      99+
      2023-06-20
    • JavaScript中怎么实现原型链和继承
      JavaScript中怎么实现原型链和继承,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原型链例子(要点写在注释里,可以把代码复制到浏览器里测...
      99+
      2022-10-19
    • 怎么在javascript中实现原型链继承
      本篇文章给大家分享的是有关怎么在javascript中实现原型链继承,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、说明构造函数、原型与实例的关系,每个构造函数都有一个原型对...
      99+
      2023-06-15
    • JavaScript继承怎么实现
      小编给大家分享一下JavaScript继承怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ES6之前,JavaScript...
      99+
      2022-10-19
    • JavaScript怎样实现继承
      这篇文章给大家分享的是有关JavaScript怎样实现继承的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。继承是面向对象编程中又一非常重要的概念,JavaScript支持实现继承,...
      99+
      2022-10-19
    • Javascript怎么实现继承
      这篇文章主要介绍“Javascript怎么实现继承”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Javascript怎么实现继承”文章能帮助大家解决问题。1、构造函...
      99+
      2022-10-19
    • JavaScript原型与继承实例分析
      今天小编给大家分享一下JavaScript原型与继承实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先我们需要知道的...
      99+
      2023-06-27
    • javascript中怎么实现继承
      今天就跟大家聊聊有关javascript中怎么实现继承,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对象冒充(多继承):a. 代码:function...
      99+
      2022-10-19
    • 如何在JavaScript中实现简单的继承
      这篇文章主要讲解了“如何在JavaScript中实现简单的继承”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在JavaScript中实现简单的继承”吧!...
      99+
      2022-10-19
    • JavaScript怎么实现继承功能
      这篇文章主要介绍“JavaScript怎么实现继承功能”,在日常操作中,相信很多人在JavaScript怎么实现继承功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
      99+
      2022-10-19
    • javascript是怎么实现继承的
      这篇文章将为大家详细讲解有关javascript是怎么实现继承的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 方法:1、利用原型让一个引用类...
      99+
      2022-10-19
    • 怎么利用JavaScript 实现继承
      小编给大家分享一下怎么利用JavaScript 实现继承,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、背景简介JavaScript 在编程语言界是个...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作