JS中面向对象中的继承(常用写法)---核心部分

QQ1210611769 2020-03-11 原文

JS中面向对象中的继承(常用写法)—核心部分

1、基本概念

子类继承父类,但是不能影响父类。包括1.混合继承(构造函数+原型) 2.ES6新增class的继承。

接下来介绍,面向对象中继承的两种常用写法。即混合继承(构造函数+原型)class继承。推荐class继承

需要用到的知识点,构造函数、原型与原型链。

(1)构造函数:构造函数是函数、也是类。通过new调用,产生实例对象。通过实例对象访问对象下面具有的属性和方法。(构造函数内部的属性和方法都是私有的)
        属性:对象的特点,修饰对象的,私有。
        方法:对象的功能,共有的。
(2)prototype:每一个函数都有一个原型prototype对象,原型对象里面放的是对象共有属性和方法。
(3)__proto__:每一个对象都有一个__proto__属性,原型链依靠这个属性连接起来。

2、混合继承

  2.1构造函数:apply/call实现

  

function Person(name, age, sex) {//构造函数
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
Person.prototype.singing = function () {//原型上的方法
            console.log('人都唱歌');
        }
function Student(name, age, sex, pro) {
            //this:实例对象,即Student类实例
            //******继承构造函数里面的属性和方法*******。
            //构造函数的继承。arguments:父类函数的参数。
            Person.apply(this, arguments);
            //Person.call(this, name, age, sex);
            this.pro = pro;
        }        

 

  2.2原型prototype:

  (1)原型链继承—最优

 //******继承原型下面的方法(原型链继承)*******。
        //父类的实例给子类的原型。
        //弊端:子类的构造函数被父类覆盖了。
        Student.prototype = new Person();
        Student.prototype.constructor = Student;//将子类的构造函数恢复

  (2)拷贝继承

第一种
for (let i in Person.prototype) { //浅拷贝,for...in...是成立的
         Student.prototype[i] = Person.prototype[i];
}
第二种
Object.assign(Student.prototype, Person.prototype);//浅拷贝

 

这样就实现了继承类里面的构造函数和原型上的方法属性,并且保留了自身的属性方法。


 

3、class继承

核心关键字:extendssuper

super:

  子类必须在constructor方法中调用super()方法,否则新建实例就会报错。以及,子类自己的this对象,必须通过父类构建,也就是说如果不调用super方法,无法使用this。
super既可当函数使用,也可当对象使用。
class Person {
            constructor(name, age, sex) {//constructor:构造函数。
                this.name = name;
                this.age = age;
                this.sex = sex;
            }
            showinfo() {
                return `你的姓名是:${this.name},你今年${this.age}岁,你是${this.sex}的`;
            }
        }

class Student extends Person {
            constructor(name, age, sex, pro) {
                //继承,包括父类属性和方法  这里super当函数使用的。
                super(name, age, sex);
                this.pro = pro;
            }
            showinfo() {//重写showinfo方法
                console.log(super.showinfo() + `,我的专业是${this.pro}`);//这里super当对象使用,调用父类的方法
            }
        }
        let s1 = new Student('lisi', 200, '女', 'web开发');
        console.log(s1.name);//lisi
        s1.showinfo();//输出:你的姓名是:lisi,你今年200岁,你是女的,我的专业是web开发    

最后

大自然不需要代码,但人类需要。—作者留

 

发表于
2020-03-11 21:55 
Louder00 
阅读(
评论(
编辑 
收藏

 

版权声明:本文为QQ1210611769原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/QQ1210611769/p/12465797.html

JS中面向对象中的继承(常用写法)---核心部分的更多相关文章

随机推荐

  1. Java使用 POI 操作Excel

      Java中常见的用来操作 Excel 的方式有2种:JXL和POI。JXL只能对 Excel进行操作,且只 […]...

  2. docker基础学习一

          docker 介绍      1、docker 是什么 ?   docker是一个开源的应用容器引 […]...

  3. 怎么修复hh.exe程序

    怎么修复hh.exe程序 电脑CHM文件打不开 之前由于电脑某些问题 自己电脑的CHM文件打不开了于是上百度搜 […]...

  4. .NET斗鱼直播弹幕客户端(2021)

    之前的.NET斗鱼弹幕不能用了?看这篇文章即可。 .NET斗鱼直播弹幕客户端(2021) 离之前更新的两篇《. […]...

  5. Git合并指定文件到另一个分支

    经常被问到如何从一个分支合并特定的文件到另一个分支。其实,只合并你需要的那些commits,不需要的commi […]...

  6. 猴子吃桃问题之《C语言经典案例分析》

    猴子吃桃问题之《C语言经典案例分析》一、【什么是猴子吃桃】       猴子吃桃问题:猴子第一天摘下若干个桃子 […]...

  7. 基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

    这是 Jerry 2021 年的第 61 篇文章,也是汪子熙公众号总共第 338 篇原创文章。 短歌行 曹操 […]...

  8. 使用Portainer部署Docker容器实践

    一、背景 最近在使用rancher2.5.5部署Redis主从复制的时候,发现rancher会产生很多ipta […]...

展开目录

目录导航