IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript 实现继承的几种方式 -> 正文阅读

[JavaScript知识库]JavaScript 实现继承的几种方式

一、原型继承

什么是原型链?

利用原型链,继承父级构造函数,继承原型上的方法

语法 : 子构造函数.prototype = new 父级构造函数 ( )?

      function Person(a) {}
        Person.prototype.eat=()=>{
            console.log('吃');
        }
        function Son(b) {}
        Son.prototype = new Person()
        let son1 = new Son()
        son1.eat() //吃

扩展点 子构造函数原型上原来的constructor不指向原来的构造函数了

        console.dir(Son);
        console.dir(Person);

解决方案 指回构造函数

Son.prototype.constructor = Son

?二、组合继承

组合继承 : 属性 + 方法? (原型链 +? call )?

在原型的基础上? 继承属性 :

是使用原型链实现对原型属性和方法的继承 (主要是方法),而通过借用构造函数来实现对实例属性构造的继承

        function Person(name, age) {
            this.name = name
            this.age = age
        }
        Person.prototype.eat = () => {
            console.log('吃');
        }

        function Son(name, age, hobby) {
            Person.call(this, name, age) //继承构造函数的属性
            this.hobby = hobby
        }
        Son.prototype = new Person()
        let son1 = new Son('张三','18','写博客')
        son1.eat()
        Son.prototype.constructor = Son
        console.log(son1.name,son1.age,son1.hobby); // '张三','18','写博客'

?三、寄生组合继承

        Son.prototype = new Person()
        console.dir(Son);

在组合继承的基础上发现 new Person时 Person并没有去使用,我们只是通过创建父构造函数时 去找构造函数的原型,并没有对父构造函数进行赋值等操作,所以就要对new Person进行优化。

只需要把new Person 改为 Object.creat(Person.prototype)?

     Son.prototype = Object.create(Person.prototype)

Object.create(对象) 做了两件事

  1. Object.create 会创建一个新对象,

  2. 并且这个新对象的__proto__ 会指向传入的参数对象

?四、class继承

重点 extends、super? 先调用super在调用自己

// 继承关键字 => extends
class Person {
  constructor (name, age) {
    this.name = name
    this.age = age
  }
  jump () {
    console.log('会跳')
  }
}

class Teacher extends Person {
  constructor (name, age, lesson) {
    super(name, age) // extends 中, 必须调用 super(), 会触发执行父类的构造函数
    this.lesson = lesson
    console.log('构造函数执行了')
  }
  sayHello () {
    console.log('会打招呼')
  }
}

let teacher1 = new Teacher('zs', 18, '体育')
console.log(teacher1)

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 11:55:09  更:2021-08-13 11:56:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 8:54:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码