欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入淺析ES6 Class 中的 super 關(guān)鍵字

 更新時間:2017年10月20日 17:24:24   作者:霧里看花嘆朦朧  
本文給大家收藏整理了ES6 Class 中的 super 關(guān)鍵字,非常不錯,具有參考借鑒價值,需要的朋友參考下吧

以下只是個人的學(xué)習(xí)筆記:

super這個關(guān)鍵字,既可以當(dāng)作函數(shù)使用,也可以當(dāng)作對象使用。在這兩種情況下,它的用法完全不同。

1、當(dāng)作函數(shù)使用

class A {}
class B extends A {
 constructor() {
  super(); //ES6 要求,子類的構(gòu)造函數(shù)必須執(zhí)行一次super函數(shù)。
 }
}

注意,super雖然代表了父類A的構(gòu)造函數(shù),但是返回的是子類B的實例,即super內(nèi)部的this指的是B,因此super()在這里相當(dāng)于A.prototype.constructor.call(this)。

class A {
 constructor() {
  console.log(new.target.name); //new.target指向當(dāng)前正在執(zhí)行的函數(shù)
 }
}
class B extends A {
 constructor() {
  super();
 }
}
new A() // A
new B() // B

可以看到,在super()執(zhí)行時,它指向的是子類B的構(gòu)造函數(shù),而不是父類A的構(gòu)造函數(shù)。也就是說,super()內(nèi)部的this指向的是B。

2、當(dāng)作對象使用

在普通方法中,指向父類的原型對象;在靜態(tài)方法中,指向父類。

class A {
 c() {
  return 2;
 }
}
class B extends A {
 constructor() {
  super();
  console.log(super.c()); // 2
 }
}
let b = new B();

上面代碼中,子類B當(dāng)中的super.c(),就是將super當(dāng)作一個對象使用。這時,super在普通方法之中,指向A.prototype,所以super.c()就相當(dāng)于A.prototype.c()。

通過super調(diào)用父類的方法時,super會綁定子類的this。

class A {
 constructor() {
  this.x = 1;
 }
 s() {
  console.log(this.x);
 }
}
class B extends A {
 constructor() {
  super();
  this.x = 2;
 }
 m() {
  super.s();
 }
}
let b = new B();
b.m() // 2

上面代碼中,super.s()雖然調(diào)用的是A.prototype.s(),但是A.prototype.s()會綁定子類B的this,導(dǎo)致輸出的是2,而不是1。也就是說,實際上執(zhí)行的是super.s.call(this)。

由于綁定子類的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
  console.log(this.x); // 3
 }
}
let b = new B();

上面代碼中,super.x賦值為3,這時等同于對this.x賦值為3。而當(dāng)讀取super.x的時候,讀的是A.prototype.x,所以返回undefined。

注意,使用super的時候,必須顯式指定是作為函數(shù)、還是作為對象使用,否則會報錯。

class A {}
class B extends A {
 constructor() {
  super();
  console.log(super); // 報錯
 }
}

上面代碼中,console.log(super)當(dāng)中的super,無法看出是作為函數(shù)使用,還是作為對象使用,所以 JavaScript 引擎解析代碼的時候就會報錯。這時,如果能清晰地表明super的數(shù)據(jù)類型,就不會報錯。

最后,由于對象總是繼承其他對象的,所以可以在任意一個對象中,使用super關(guān)鍵字。

總結(jié)

以上所述是小編給大家介紹的ES6 Class 中的 super 關(guān)鍵字,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 《javascript設(shè)計模式》學(xué)習(xí)筆記五:Javascript面向?qū)ο蟪绦蛟O(shè)計工廠模式實例分析

    《javascript設(shè)計模式》學(xué)習(xí)筆記五:Javascript面向?qū)ο蟪绦蛟O(shè)計工廠模式實例分析

    這篇文章主要介紹了Javascript面向?qū)ο蟪绦蛟O(shè)計工廠模式,結(jié)合實例形式分析了《javascript設(shè)計模式》中Javascript面向?qū)ο蠊S模式相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 使用js實現(xiàn)的簡單拖拽效果

    使用js實現(xiàn)的簡單拖拽效果

    本文給大家分享的是使用純JS實現(xiàn)的簡單的拖拽效果的插件,算是對自己javascript學(xué)習(xí)的一個小的檢驗,如果小伙伴們需要復(fù)雜的拖拽效果,還是考慮jQuery的draggable吧,更成熟一些。
    2015-03-03
  • script不刷新頁面的聯(lián)動前后代碼

    script不刷新頁面的聯(lián)動前后代碼

    如何實現(xiàn)script不刷新頁面的聯(lián)動,在本文有個不錯的示例或許對大家有所幫助
    2013-09-09
  • 一個JS小玩意 幾個屬性相加不能超過一個特定值.

    一個JS小玩意 幾個屬性相加不能超過一個特定值.

    以前玩游戲,有給玩家角色分配什么魔法點數(shù),體力點數(shù)的功能,而且?guī)讉€屬性相加不能超過一個特定值.
    2009-09-09
  • javascript 繼承實現(xiàn)方法

    javascript 繼承實現(xiàn)方法

    javascript的繼承機制并不是明確規(guī)定的,而是通過模仿實現(xiàn)的,意味著繼承不是由解釋程序處理,開發(fā)者有權(quán)決定最適合的繼承方式.
    2009-08-08
  • js 中的柯里化與反柯里化的基礎(chǔ)概念和用法

    js 中的柯里化與反柯里化的基礎(chǔ)概念和用法

    柯里化是將接受多個參數(shù)的函數(shù)轉(zhuǎn)換成一系列只接受單個參數(shù)的函數(shù)的過程,而反柯里化是將柯里化函數(shù)轉(zhuǎn)換成接受多個參數(shù)的函數(shù)的過程,本文將帶大家理解 js 中的柯里化與反柯里化,需要的朋友可以參考下
    2023-07-07
  • 分享十八個殺手級JavaScript單行代碼

    分享十八個殺手級JavaScript單行代碼

    這篇文章主要給大家分享了十八個殺手級JavaScript單行代碼,這些單行代碼可以幫助你提高工作效率并可以幫助調(diào)試代碼,對大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-10-10
  • js實現(xiàn)帶按鈕的上下滾動效果

    js實現(xiàn)帶按鈕的上下滾動效果

    這篇文章主要介紹了js實現(xiàn)帶按鈕的上下滾動效果,設(shè)計javascript鼠標(biāo)事件及頁面元素樣式的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • 詳解小程序緩存插件(mrc)

    詳解小程序緩存插件(mrc)

    這篇文章主要介紹了詳解小程序緩存插件(mrc),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Bootstrap輪播插件簡單使用方法介紹

    Bootstrap輪播插件簡單使用方法介紹

    這篇文章主要為大家詳細(xì)介紹了Bootstrap輪播插件簡單使用方法,介紹了使用bootstrap輪播插件的作用,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論