作用:
- super 關鍵字用于訪問父對象上的函數(shù)。
語法:
- super([arguments]); // 訪問父對象上的構造函數(shù)
- super.functionOnParent([arguments]); // 訪問父對象上的方法
詳解:
- super可以用在類的繼承中,或者對象字面量中,super指代了整個prototype或者proto指向的對象
- 類(prototype相關)
a. 用在子類constructor函數(shù)中
class Person {
constructor(name) {
this.name = name;
}
}
class Student extends Person {
constructor(name, age) {
super(); // 用在構造函數(shù)中,必須在使用this之前調用
this.age = age;
}
}
super()調用會生成一個空對象,作為context來調用父類的constructor,返回this對象,作為子類constructor的context繼續(xù)調用構造函數(shù)。
context:執(zhí)行上下文 constructor:構造函數(shù)
b. 調用父類的靜態(tài)函數(shù)
class Human {
constructor() {}
static ping() {
return 'ping';
}
}
class Computer extends Human {
constructor() {}
static pingpong() {
return super.ping() + ' pong';
} // 只有在子類的靜態(tài)函數(shù)中才能調用父類的靜態(tài)函數(shù)(babel環(huán)境測試,按理說,在實例函數(shù)中應該也可以調用,不過實際測試環(huán)境中報錯)
}
Computer.pingpong(); // 'ping pong'
- 對象的字面量(proto項目)
var obj1 = {
method1() {
console.log("method 1");
}
}
var obj2 = {
method2() {
super.method1();
}
}
// 必須利用setPrototypeOf將第二個對象的原型設為第一個對象
Object.setPrototypeOf(obj2, obj1);
obj2.method2(); // logs "method 1"