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高级-原型链继承-构造函数继承-组合继承

7.原型链继承

  1. 流程
    1. 定义父类型构造函数
    2. 给父类型的原型添加方法
    3. 定义子类型的构造函数
    4. 创建父类型的实例赋值给子类型的原型
    5. 为子类型的原型添加方法
  2. 关键
    1. 子类型的原型为父类型的实例对象

示例

    //父类型
    function Supper(){
        this.supProp = 'Supper property'
    }
    Supper.prototype.showSupperProp = function(){
        console.log(this.supProp);
    }

    //子类型
    function Sub(){
        this.subProp = 'Sub property'
    }
    
    var supper = new Supper()
    Sub.prototype = new Supper()
    Sub.prototype.showSubProp = function(){
        console.log(this.subProp);
    }
    var sub = new Sub()
    sub.showSupperProp()// Supper property
    sub.showSubProp() //  Sub property

解释

在这里插入图片描述

1.对原型链继承的解释

  • 当我们的子类需要继承父类的变量或者方法时,我们可以用到原型链继承,继承的关键是将子类的prototype指向父类的__ proto __ ,也就是子类的原型为父类的实例对象
  • 原型链的继承可以使得子类的原型链上拥有父类的原型属性,实际上是对子类原型链的修改

2.为什么子类的原型要指向父类的实例对象而不是指向父类的原型(构造函数)?

  • 如果指向父类本身,那么我们在给子类的原型添加方法时,父类也会得到相同的方法,这样会造成引用混乱,例如

    function Person(name,age){
        this.name = name;
        this.age = age;
    }
    
    Person.prototype.sayHi = function (){
        console.log("Hi,I'm "  + this.name);
    }
    
    function Student(name, age, grade){
        Person.call(this, name, age);
        this.grade = grade;
    }
    Student.prototype = Person.prototype
    Student.prototype.sayHello =function(){
        console.log("Hello, I'm "+ this.name +", I'm in grade " + this.grade + ", nice to meet you.");
        };
    
    var wang_son = new Student('老王儿子',8,'二年级');
    var wang = new Person('老王',30);
    wang_son.sayHi();//Hi,I'm 老王儿子
    wang_son.sayHello();//Hello, I'm 老王儿子, I'm in grade 二年级, nice to meet you.
    wang.sayHello()//Hello, I'm 老王, I'm in grade undefined, nice to meet you.
    
    

    如上所示,如果指向父类的原型,那么我们可以在父类中调用子类的方法,这明显是不应该出现的


    借用构造函数实现继承

实现:

  1. 定义父类构造函数
  2. 定义子类构造函数
  3. 在子类构造函数中调用父类构造函数

关键

  1. 在子类构造函数使用call调用父类构造函数,改变父类构造函数的this指向

示例

    function Person(name,age){
        this.name = name
        this.age = age
    }
    function Student(name,age,price){
        Person.call(this,name,age)
        this.price = price
    }
    var s = new Student('Tom',20,14000)
    console.log(s.name);//Tom

组合继承

定义:

  1. 利用原型链实现对父类对象的方法的继承
  2. 利用call()借用父类构造函数的属性

示例

function Person(name,age){
        this.name = name
        this.age = age
    }
    Person.prototype.setName =function(name){
        this.name = name
    }
    function Student(name,age,price){
        Person.call(this,name,age)//传入this,将person的this指向变成Student
        this.price = price
    }
    Student.prototype = new Person()
    Student.prototype.constructor = Student
    var s = new Student('tom',15,14000)
    s.setName('bob')
    console.log(s.name);//bob

如上所示,利用原型继承 继承父类的方法,利用call()方法继承父类的属性(call方法可以改变函数的this指向)

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:07:25  更:2021-10-26 12:09:46 
 
开发: 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年5日历 -2024/5/14 1:29:02-

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