• super的两个作用


    super与实例没有什么关系,它本身有两个作用的,参考如下理解:

    1.super可以当函数用。super作为函数调用时,表示父类的构造函数。示例:

    class Par {
    
            constructor() {
    
                this.num = 21;
    
            }
    
        }
    
        class Chil extends Par {
    
            constructor() {
    
                //继承父类的构造函数constructor
    
                super() 
    
            }
    
        }
    
        var p = new Chil();
    
        // 子类的实例上,可以调用num属性,则说明子类的构造函数中
    
        // 通过 super() 继承了父类的构造函数。
    
        console.log(p.num) //21

    super() 表示的父类的构造器,那么super() 中的参数,自然表示父类构造器中的参数。

    class Par {
    
            // 为了区分父类与子类的参数,这里起名为username1
    
            constructor(username1) { //username1接收username的值
    
    
    
                this.username = username1; //所以this.username="小慕"
    
            }
    
        }
    
        class Chil extends Par {
    
            constructor(username) { //username接收的就是下面实例化的参数"小慕"
    
                
    
                super(username)//super表示父类的构造器,所以这里是把username传递给父类构造器
    
            }
    
        }
    
    
    
        var p = new Chil("小慕"); //实例化的时候,传入参数"小慕"
    
        // 实例化对象,会继承类的属性和方法,Chil类继承了父类的属性username,所以Chil类的实例化对象
    
        //也就可以调用到username,输出"小慕"
    
        console.log(p.username) //小慕

    2.可以作为对象使用。super 作为对象使用时, 在普通的方法中,指向的是父类的原型对象。在静态方法中,指向的是父类。

    也就是作为对象去使用分了两种情况,扩展一下,作为了解:

    class A {
    
            constructor() {
    
               
    
            }
    
            // 普通方法,放在A原型上的。
    
            say() {
    
                console.log("普通方法")
    
            }
    
    
    
            // 加static定义的叫做静态方法,能被子类继承,但是不能被实例化对象继承。
    
            static greeting() {
    
                console.log("静态方法")
    
            }
    
        }
    
    
    
       
    
        class B extends A {
    
            constructor() {
    
                super(); //在构造器中,作为函数调用,是继承父类构造器
    
            }
    
            bsay() {
    
                // 在普通方法中,super指向的是父类原型对象,即prototype,
    
                // 所以能访问父类原型上的方法。
    
                super.say() // "普通方法";
    
            }
    
    
    
            static bgreeting() {
    
                // 在静态方法中,super指向的是父类,能访问父类的静态属性和静态方法。
    
    
    
                super.greeting(); //"静态方法"
    
                
    
            }
    
        }
    
    
    
        let xiao = new B();
    
        xiao.bsay();
    
        B.bgreeting();
  • 相关阅读:
    echarts事件触发多次解决办法
    nginx代理出现的问题
    iframe页面之间通信
    获取当前日期的前XX天或者后XX天
    获取本月往后一年的日期月份信息
    Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)D. Take a Guess
    Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)C. Compressed Bracket Sequence
    Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)B. Take Your Places!
    Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2) A. A Variety of Operations
    centos 查看mysql数据库命令
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/13737384.html
Copyright © 2020-2023  润新知