最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析ES6 Class 中的 super 關鍵字

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

以下只是個人的學習筆記:

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

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

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

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

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

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

2、當作對象使用

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

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

上面代碼中,子類B當中的super.c(),就是將super當作一個對象使用。這時,super在普通方法之中,指向A.prototype,所以super.c()就相當于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,導致輸出的是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。而當讀取super.x的時候,讀的是A.prototype.x,所以返回undefined。

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

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

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

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

總結

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

相關文章

  • 前端JS可視化學習利用向量判斷多邊形邊界

    前端JS可視化學習利用向量判斷多邊形邊界

    這篇文章主要為大家介紹了前端JS可視化學習利用向量判斷多邊形邊界示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • JavaScript實現(xiàn)N皇后問題算法謎題解答

    JavaScript實現(xiàn)N皇后問題算法謎題解答

    這篇文章主要介紹了JavaScript實現(xiàn)N皇后問題算法謎題解答,N皇后問題是指將N個皇后放置在NxN的國際象棋棋盤上,其中沒有任何兩個皇后處于同一行、同一列或同一對角線上,以使得它們不能互相攻擊,需要的朋友可以參考下
    2014-12-12
  • JS canvas實現(xiàn)畫板和簽字板功能

    JS canvas實現(xiàn)畫板和簽字板功能

    這篇文章主要為大家詳細介紹了JS canvas實現(xiàn)畫板和簽字板功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 微信小程序?qū)崿F(xiàn)之手勢鎖功能實例代碼

    微信小程序?qū)崿F(xiàn)之手勢鎖功能實例代碼

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)之手勢鎖功能的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • JavaScript實現(xiàn)捕獲鼠標坐標

    JavaScript實現(xiàn)捕獲鼠標坐標

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)捕獲鼠標坐標,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 使用原生js封裝的ajax實例(兼容jsonp)

    使用原生js封裝的ajax實例(兼容jsonp)

    下面小編就為大家?guī)硪黄褂迷鷍s封裝的ajax實例(兼容jsonp)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • javascript 通過鍵名獲取鍵盤的keyCode方法

    javascript 通過鍵名獲取鍵盤的keyCode方法

    下面小編就為大家分享一篇javascript 通過鍵名獲取鍵盤的keyCode方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • javascript類型系統(tǒng)_正則表達式RegExp類型詳解

    javascript類型系統(tǒng)_正則表達式RegExp類型詳解

    下面小編就為大家?guī)硪黄猨avascript類型系統(tǒng)_正則表達式RegExp類型詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • JavaScript之Array常見的方法詳解

    JavaScript之Array常見的方法詳解

    這篇文章主要為大家介紹了JavaScript之Array常見的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助V
    2021-11-11
  • JS文本框不能輸入空格驗證方法

    JS文本框不能輸入空格驗證方法

    JS文本框不能輸入空格驗證方法,需要的朋友可以參考一下
    2013-03-03

最新評論

游戏| 三亚市| 石楼县| 婺源县| 广安市| 满洲里市| 漳平市| 和林格尔县| 棋牌| 三明市| 渝北区| 双柏县| 都匀市| 大连市| 天长市| 无极县| 达日县| 永州市| 义乌市| 九龙坡区| 平利县| 田东县| 漳州市| 长白| 大石桥市| 榕江县| 佛坪县| 平乡县| 呼和浩特市| 大丰市| 土默特左旗| 山东省| 百色市| 射洪县| 扶余县| 甘南县| 铁岭县| 新化县| 理塘县| 陕西省| 昌都县|