super

作者: 小麻烦爱学习 | 来源:发表于2020-03-30 18:07 被阅读0次

    super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。

    第一种情况,super作为函数调用时,代表父类的构造函数。
    第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。
    在子类普通方法中通过super调用父类的方法时,方法内部的this指向当前的子类实例。
    class A {
    constructor() {
    this.x = 1;
    }
    print() {
    console.log(this.x);
    }
    }

    class B extends A {
    constructor() {
    super();
    this.x = 2;
    }
    m() {
    super.print();//相当于super.print.call(this)
    }
    }

    let b = new B();
    b.m() // 2

    由于this指向子类实例,所以如果通过super对某个属性赋值,这时super就是this,赋值的属性会变成子类实例的属性。

    class A {
    constructor() {
    this.x = 1;
    }
    }

    class B extends A {
    constructor() {
    super();
    this.x = 2;
    super.x = 3;
    console.log(super.x); // undefined,相当于A.prototype.x
    console.log(this.x); // 3
    }
    }

    let b = new B();
    https://es6.ruanyifeng.com/#docs/class-extends

    相关文章

      网友评论

          本文标题:super

          本文链接:https://www.haomeiwen.com/subject/tuzvuhtx.html