学科分类
目录
JavaScript网页编程

super关键字

super关键字用于访问和调用对象在父类上的方法,可以调用父类的构造方法,也可以调用父类的普通方法。示例代码如下。

 1  class Father {

 2   constructor(x, y) {

 3    this.x = x;

 4    this.y = y;

 5   }

 6   sum() {

 7    console.log(this.x + this.y);

 8   }

 9  }

 10 class Son extends Father {

 11  constructor(x, y) {

 12   super(x, y);   // 调用父类的构造方法

 13  }

 14 }

 15 var son = new Son(1, 2);

 16 son.sum();     // 输出结果:3

在上述代码中,第12行代码调用了父类的构造方法,当子类和父类都编写了构造方法的时候,子类需要用super调用父类的构造方法,否则代码在运行时会报错。

super关键字也可以调用父类的普通方法,示例代码如下。

 1  class Father {

 2   say() {

 3    return '我是父类';

 4   }

 5  }

 6  class Son extends Father {

 7   say() {

 8    console.log(super.say() + '的子类'); 

 9   }

 10 }

 11 var son = new Son(1, 2);

 12 son.say();     // 输出结果:我是父类的子类

在上述代码中,当子类和父类具有同名方法(即say()方法)的时候,因为最后实例化的对象是子类对象,所以子类的say()方法会覆盖父类的say()方法。如果想要让父类的say()方法也执行,就在子类的say()方法中通过super.say()调用父类的say()方法。

子类在继承了父类以后,也可添加一些属于自己的方法,示例代码如下。

 1  class Father {

 2   constructor(x, y) {

 3    this.x = x;

 4    this.y = y;

 5   }

 6   sum() {

 7    console.log(this.x + this.y);

 8   }

 9  }

 10 class Son extends Father {

 11  constructor(x, y) {

 12   super(x, y);   // super必须在子类的this之前调用

 13   this.x = x;

 14   this.y = y;

 15  }

 16  subtract() {   // 子类特有的方法

 17   console.log(this.x - this.y);

 18  }

 19 }

 20 var son = new Son(5, 3);

 21 son.sum();     // 输出结果:8

 22 son.subtract();   // 输出结果:2

在上述代码中,第12行在子类的构造方法中使用super,super必须放在this的前面,否则会报错。也就是说,子类必须先调用父类的构造方法,才能继续执行自己的构造方法。

点击此处
隐藏目录