zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    EP-N8530S USB WIFI 驱动移植
    MySQL(十三)事务处理和字符集
    MySQL(十二)游标和触发器
    《Google软件测试之道》测试工程师
    jmeter(十二)关联之正则表达式提取器
    MySQL(十一)视图及存储过程
    jmeter(十一)JDBC Request之Query Type
    MySQL(十)操纵表及全文本搜索
    MySQL(九)插入、更新和删除
    MySQL(八)子查询和分组查询
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/13737384.html
Copyright © 2011-2022 走看看