更新時(shí)間:2021-12-16 來(lái)源:黑馬程序員 瀏覽量:
super關(guān)鍵字用于訪問(wèn)和調(diào)用對(duì)象在父類(lèi)上的方法,可以調(diào)用父類(lèi)的構(gòu)造方法,也可以調(diào)用父類(lèi)的普通方法。示例代碼如下。
class Father { constructor(x, y) { this.x = x; this.y = y; } sum() { console.log(this.x + this.y); } } class Son extends Father { constructor(x, y) { super(x, y); //調(diào)用父類(lèi)的構(gòu)造方法 } } var son = new Son(1, 2); son.sum(); //輸出結(jié)果:3在上述代碼中,第12行代碼調(diào)用了父類(lèi)的構(gòu)造方法。當(dāng)子類(lèi)和父類(lèi)都編寫(xiě)了構(gòu)造方法的時(shí)候,子類(lèi)需要用super調(diào)用父類(lèi)的構(gòu)造方法,否則代碼在運(yùn)行時(shí)會(huì)報(bào)錯(cuò)。
super關(guān)鍵字也可以調(diào)用父類(lèi)的普通方法,示例代碼如下。
class Father { say() { return '我是父類(lèi)'; } class Son extends Father { say() { console.log(super.say() + '的子類(lèi)'); } } var son = new Son(1, 2); son.say(); //輸出結(jié)果:我是父類(lèi)的子類(lèi)
在上述代碼中,當(dāng)子類(lèi)和父類(lèi)具有同名方法(即say()方法)的時(shí)候,因?yàn)樽詈髮?shí)例化的對(duì)象是子類(lèi)對(duì)象,所以子類(lèi)的say()方法會(huì)覆蓋父類(lèi)的say()方法。如果想要讓父類(lèi)的say()方法也執(zhí)行,就要在子類(lèi)的say()方法中通過(guò)super.say()調(diào)用父類(lèi)的say0方法。
子類(lèi)在繼承了父類(lèi)以后,也可添加一些屬于自己的方法,示例代碼如下。
class Father { constructor(x, y) { this.x = x; this.y = y; } sum() { console.log(this.x + this.y); } } class Son extends Father { constructor(x, y) { super(x, y); // super必須在子類(lèi)的this之前調(diào)用 this.x = x; this.y = y; } subtract() { //子類(lèi)特有的方法 console.log(this.x - this.y); } } var son = new Son(5, 3); son.sum(); //輸出結(jié)果:8 son.subtract(); //輸出結(jié)果:2
在上述代碼中,第12行在子類(lèi)的構(gòu)造方法中使用了super,super必須放在this的前面,否則會(huì)報(bào)錯(cuò)。也就是說(shuō),子類(lèi)必須先調(diào)用父類(lèi)的構(gòu)造方法,才能繼續(xù)執(zhí)行自己的構(gòu)造方法。
使用 this關(guān)鍵字調(diào)用本類(lèi)的構(gòu)造方法