ES6 Super关键字

  //super关键字
        //1、作为函数调用,调用父类的构造函数.
        //ES6中要求,在字类构造函数中,必须执行一个super函数
        //super指向父类的原型不是父类class
        class A {
            constructor(x) {
                this.x = x
            }
        }

        class B extends A {
            constructor(x, y) {
                //调用父类构造函数
                //A.prototype.constructor.call(this)
                //super代表的父类构造函数,但是在执行父类构造函数中的this代表的是子类的实例
                super(x)
                this.y = y
            }
        }

        var b = new B
        console.log(b)

        //2、super作为对象引用,指向父类的原型对象
        class C {
            //定义在父类实例自身属性
            x = 2
            //定义在父类原型对象上
            p() {
                return 1
            }
        }
        C.prototype.y = 3

        class D extends C {
            constructor() {
                super();

                console.log(super.p())
                console.log(super.x, super.y)
            }
        }
        var d = new D()
        console.log("d", d)

        console.log("-------------------------")
        //父类的静态方法,可以被子类继承
        class Foo {
            static methodA() {
                return "hello"
            }
        }

        class Bar extends Foo {

            static methodB() {
                //静态方法中的super,指向父类 Foo.methodA
                return super.methodA() + " methodB"
            }
        }
        console.log(Bar.methodA())
        console.log(Bar.methodB())

posted @ 2021-02-27 09:03  abcdefgab  阅读(67)  评论(0)    收藏  举报