返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中的常见继承总结
  • 176
分享到

JavaScript中的常见继承总结

2024-04-02 19:04:59 176人浏览 八月长安
摘要

目录前言原型链常用的继承方法原型继承原理优点缺点执行结果借用构造函数继承原理优点缺点执行结果组合继承原理优点缺点执行结果前言 我们在学习前端的过程中一定会遇到继承这个问题 继承其实就

前言

我们在学习前端的过程中一定会遇到继承这个问题

继承其实就是构造函数和构造函数之间的一种关系

当一个构造函数A的实例使用构造函数B身上的属性和方法,这个时候我们就说构造函数A继承至构造函数B。

我们一般把构造函数A称之为子类,构造函数B称之为父类。

想要弄明白继承就要先弄明白原型链

原型链

  function Person() {
            // 属性
            this.name = 'Jack'
            this.age = 18
            this.gender = '男'
        }
		// 实例
        const p = new Person()


        // 1.p 的 __proto__ 指向了谁?
        console.log(p.__proto__ === Person.prototype)

        // 2.Person 的 __proto__ 指向了谁 ?
        console.log(Person.__proto__ === Function.prototype)

        // 3.Person.prototpye 的 __proto__ 指向了谁 ?
        console.log(Person.prototype.__proto__ === Object.prototype)

        // 4.Function.prototype 的 __proto__ 指向了谁 ?
        console.log(Function.prototype.__proto__ === Object.prototype)

        // 5.Function 的 __proto__ 指向了谁 ?
        console.log(Object.prototype.__proto__)

        // 6.Object.prototype 的 __proto__ 指向了谁 ?
        console.log(Function.__proto__ === Function.prototype)

        // 7.Object 的 __proto__ 指向了谁 ?
        console.log(Object.__proto__ === Function.prototype)

常用的继承方法

我们在面试或者开发过程中使用做多的继承有:

  • 原型继承
  • 原型链继承
  • 组合继承

当然还有一些别的继承,其它的继承相对于上面的三种情况使用的就少了很多:

主要介绍上面的三种继承

原型继承

原理

  • 原型继承的核心原理:子类的原型指向父类的实例
  • 这个也可以理解成把父类的实例赋值给子类的原型对象

优点

  • 父类构造函数体内的属性和原型上的方法都可以实现继承

缺点

  • 继承下来的属性不在自己身上, 在自己的原型上
  • 一个构造函数的实例, 需要在两个地方传递参数
  • 所有子类的实例, name 和 age 一模一样
        // 父类
        function Person(name, age) {
            //属性
            this.name = name
            this.age = age
        }
        // 方法
        Person.prototype.paly = function () { console.log('玩游戏'); }
​
        // 子类
        function Students(classRoom) {
            // 属性
            this.classRoom = classRoom
        }
​
        // 把子类的原型指向父类的实例对象
        // 把父类的实例赋值给子类的原型(原型对象)
        // 创建一个父类的实例
        const p = new Person('Jack', 25)
        // 子类的实例指向父类的原型对象
        Students.prototype = p
​
       // 实例化一个对象
       let s = new Students('高级1班')
       console.log(s);
       let s1 = new Students('高级2班')
       console.log(s1);

执行结果

借用构造函数继承

原理

  • 把我们的父类够构造函数当做普通函数在子类构造函数体内调用
  • 利用 call 方法改变函数内的 this 指向

优点

  • 子类的所有继承下来的属性都在自己身上
  • 子类的所有参数在一个地方传递
  • 子类的所有实例都可以给继承下来的属性赋不一样的值

缺点

父类的原型上的方法没有继承下来:

// 父类
function Person(name, age) {
    // 属性
    this.name = name
    this.age = age
}
// 原型对象上添加一个方法
Person.prototype.paly = function () { console.log('玩游戏'); }
// 子类
function Students(name, age,classRoom) {
    this.classRoom = classRoom
    // 因为这个this指向的就是子类的实例
    Person.call(this, name, age)
}
// 实例化一个对象
let s = new Students('张三',25,'高级1班')
console.log(s);
let s1 = new Students('李四',20,'高级2班')
console.log(s1);

执行结果

组合继承

原理

  • 把 原型继承 和 借用构造函数 继承放在一起使用

优点

  • 把原型继承 和 借用构造函数继承放在一起使用
  • 既达到了全都继承下来又能把属性继承在自己身上

缺点

子类的原型上有一套多余的属性:

// 父类
function Person(name, age) {
    // 属性
    this.name = name
    this.age = age
}
// 原型对象上添加一个方法
Person.prototype.paly = function () { console.log('玩游戏'); }
// 子类
function Students(name, age,classRoom) {
    this.classRoom = classRoom
    // 借用构造函数继承
    Person.call(this, name, age)
}
// 原型继承
// 主要的目的就是为了使用父类身上的方法
Students.prototype = new Person()
​
// 实例化一个对象
let s = new Students('张三',25,'高级1班')
console.log(s);
​
let s1 = new Students('王五',24,'高级2班')
console.log(s1);
s1.play()

执行结果

到此这篇关于javascript中的常见继承总结的文章就介绍到这了,更多相关js常见继承内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript中的常见继承总结

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

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

猜你喜欢
  • JavaScript中的常见继承总结
    目录前言原型链常用的继承方法原型继承原理优点缺点执行结果借用构造函数继承原理优点缺点执行结果组合继承原理优点缺点执行结果前言 我们在学习前端的过程中一定会遇到继承这个问题 继承其实就...
    99+
    2024-04-02
  • js中常见的6种继承方式总结
    目录前言1、原型继承2、盗用构造函数3、组合继承4、原型式继承5、寄生式继承6、寄生式组合继承总结前言 js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的...
    99+
    2024-04-02
  • JavaScript中六种面试常考继承方式总结
    目录原型链继承盗用构造函数组合继承原型式继承寄生式继承寄生式组合继承js的几种继承方式在我们面试的时候经常会被问到,所以深入理解js几种继承方式以及它们的优缺点是非常有必要的。 原型...
    99+
    2023-02-13
    JavaScript继承方式 JavaScript继承
  • JavaScript中常见的几种继承方式
    目录原型继承内存图分析盗用构造函数继承分析组合继承原型链继承寄生式继承寄生组合式继承原型继承 function Parent(name) { this.name = name }...
    99+
    2024-04-02
  • JavaScript实现继承的6种常用方式总结
    目录1.原型链继承2.借用构造函数继承3.组合继承(经典继承)4.原型式继承方法一:借用构造函数方法二:Object.create()5.寄生式继承6.寄生组合式继承7.ES6、Cl...
    99+
    2024-04-02
  • JavaScript 继承中的常见陷阱:避免常见的误区
    ...
    99+
    2024-04-02
  • JavaScript中常见的七种继承及实现
    目录1. 原型链继承2. 借用构造函数继承3. 组合继承4. 原型式继承5. 寄生式继承6. 寄生式组合继承7. class继承1. 原型链继承 原型链继承是 JavaScript ...
    99+
    2023-03-08
    JavaScript实现继承方式 JavaScript继承
  • JavaScript中常见的七种继承怎么实现
    本篇内容主要讲解“JavaScript中常见的七种继承怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中常见的七种继承怎么实现”吧!1. 原型链继承原型链继承是 Jav...
    99+
    2023-07-05
  • JavaScript实现继承的7种方式总结
    目录什么是继承实现继承的6种方式1. 原型链继承2. 构造函数继承3. 组合继承(伪经典继承)4. 原型式继承5. 寄生式继承6.寄生组合式继承7.class 类继承什么是继承 用官...
    99+
    2023-05-14
    JavaScript实现继承方式 JavaScript继承方式 JavaScript继承
  • JavaScript原型链及常见的继承方法
    目录原型链原型链的概念原型链的问题几种常见的继承方法盗用构造函数组合继承原型式继承寄生式继承寄生组合式继承原型链 原型链的概念 在JavaScript中,每一个构造函数都有一个原型,...
    99+
    2024-04-02
  • JavaScript 继承的陷阱:避免常见的错误
    JavaScript 是一种强大的语言,提供了灵活的继承机制。然而,在使用继承时,很容易陷入陷阱,导致代码出现问题。本文将探讨 JavaScript 继承常见的陷阱,并提供避免这些陷阱的最佳实践。 陷阱 1:覆盖父类的方法 使用 sup...
    99+
    2024-02-15
    JavaScript 继承 原型 错误
  • JavaScript中常见的高阶函数总结
    目录前言map函数reduce函数filter函数sortevery方法find方法findIndex方法foreach方法总结前言 一个函数可以接受另一个函数作为参数,就把这个函数...
    99+
    2024-04-02
  • 总结JavaScript中BigIn函数常见的属性
    目录一、概述二、属性1. 数学运算符2. 比较运算符3. 布尔运算三、总结一、概述 BigInt 是一种特殊的数字类型,它提供了对任意长度整数的支持。 创建 bigint 的方式有两...
    99+
    2024-04-02
  • 【总结】一些常见的JavaScript框架
    JavaScript是一种很重要的编程语言,它具有前端开发和后端开发的双重作用。JavaScript框架可以帮助开发者更轻松地构建一个强大的Web应用程序。在本篇文章中,我们将介绍一些常见的JavaScript框架,以及它们在开发中的应用。...
    99+
    2023-05-14
  • Docker中常见的异常总结
    本篇内容主要讲解“Docker中常见的异常总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker中常见的异常总结”吧!异常一docker ps 无响应, Node 节点表现为 NotRe...
    99+
    2023-06-19
  • 一文总结JavaScript中常见的设计模式
    目录设计原则什么是设计模式一、单例模式二、策略模式三、代理模式四、迭代器模式五、发布-订阅模式六、命令模式七、组合模式八、模板方法模式九、享元模式十、职责链模式十一、中介者模式十二、...
    99+
    2023-05-19
    JavaScript设计模式 JavaScript设计
  • C++中常见的多重继承问题解析
    C++中常见的多重继承问题解析多重继承是一种常见的面向对象编程技术,允许一个类继承多个基类。然而,多重继承也常常引发一些问题和挑战,需要开发人员仔细理解和处理。菱形继承问题菱形继承是指一个派生类同时继承了两个基类,并且这两个基类又共同继承同...
    99+
    2023-10-22
    C++ 多重继承 问题解析
  • Java基础知识总结之继承
    目录一、继承的基本概念二、继承的好处和弊端三、继承中变量访问的特点四、super关键字五、继承中构造方法的访问特点六、继承中成员方法的访问特点七、方法重写八、包九、修饰符十、stat...
    99+
    2024-04-02
  • 详细总结Python类的多继承知识
    目录一、Python不同版本的类二、多继承三、多继承弊端四、Python多继承实现五、多继承的缺点六、Mixin 七、Mixin类一、Python不同版本的类 P...
    99+
    2024-04-02
  • Python类的继承和方法重写总结
    Python类的继承和方法重写总结  我们都知道类可以继承,通过继承可以实现代码的复用,使代码看起来更加简洁 比如:Class B(A): Pass 定义了一个名为B的类,它继承于A,我们把B叫做A的子类,A叫做B的超类(父类)。 方法重写...
    99+
    2023-01-31
    重写 方法 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作