ES6中super关键字有哪三种用法?
this 关键字总是指向函数所在的当前对象。ES6 又新增了另一个类似的关键字 super,指向当前对象的原型对象。
const proto = {
foo: 'hello'
};
const obj = {
foo: 'world',
find() {
return super.foo;
}
};
Object.setPrototypeOf(obj, proto); // 为 obj 设置原型对象
obj.find(); // "hello"
super 的三种用法
- 作为函数调用:
super(...args),只能在子类构造函数里调用,代表父类的构造函数。 - 作为对象访问属性:在子类方法中
super.prop,访问父类原型上的属性/方法。 - 在静态方法中:
super.staticMethod,指向父类的构造函数,可调用父类的静态方法。
class Animal {
constructor(name) { this.name = name; }
speak() { return this.name + ' makes a noise.'; }
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 调用父类构造
this.breed = breed;
}
speak() {
return super.speak() + ' (Dog)'; // 调用父类方法
}
static info() {
return super.info?.() || 'mammal';
}
}
注意
super不能单独引用,必须配合属性或方法使用。- 在箭头函数中
super绑定外层函数作用域,行为与普通函数一致。 - 子类构造函数里
this只能在super()之后使用。
来源整理自:vue3js.cn 面试官系列



