1. 程式人生 > >es6 學習筆記5

es6 學習筆記5

static關鍵字 外部 變量 名稱 參數 之前 png target 9.png

1、class

  通過該關鍵詞,可以定義類,基本上,es6的class可以看做只是一個語法糖,並且在類的內部所有定義的方法,都是不可枚舉的

  <1>在class裏面定義一個constructor的構造方法,this關鍵詞代表的是實例對象,需要對class傳遞參數的話,就用constructor來接收

  該方法是類的默認行為,通過new命令省事對象實例時,自動調用該方法,一個類必須有constructor方法,如果沒有顯式,一個空的constructor方法會被默認添加

class Person {
       constructor(x, y) {
       
      }  
}    

  <2>調用該方法: const p = new Person(1,2);

  <3>與函數一樣,類也可以使用表達式的形式定義,並且使用表達式定義類之後,這個類的名稱是myClass 而不是MyClass了,並且MyClass只能在class的內部可以用,指代當前類,

  如果內部沒有用到的話,可以省略MyClass 

const myClass = class MyClass {
}

  <4> 類不存在變量提升,類必須在使用的之前定義

  <5>私有方法可以通過在方法的前面加下劃線來區分,但是這種命名是不保險的,在類的外部,還是可以調用到這個方法,也可以通過將私有方法移出模塊,因為模塊內部的所有方法都是對外可見的,可以通過bar.call(this, baz)來調用

  <6>私有的屬性的話,是在變量前面添加#

  <7>name屬性,返回的是緊跟在class關鍵字後面的類名

    p.name //"Person"

  <8>在類的內部可以使用get和set關鍵字,對摸個屬性設置存值函數和取值函數,攔截該屬性的存取行為

  <9>class的內部只有靜態方法,沒有靜態屬性,因此,類的實例屬性可以用等式,寫入類的定義之中。靜態數次那個的話,就是在實例屬性的前面加一個static關鍵字

  <10>new.target屬性

    該屬性一般用在構造函數之中,返回new命令作用於的那個構造函數,如果構造函數不是通過new命令調用的,那麽new,.target會返回undefined,因此這個屬性可以用阿裏確定構造函數是怎麽調用的

  <11>class可以通過extends關鍵字來實現繼承

    (1)如果是父類繼承父類的時候使用super

      子類必須constructor中調用super的方法,並且還必須在調用super之後,才能使用this關鍵詞,因為子類沒有自己的this對象,而是繼承父類的this對象,如果不調用的話,子類就得不到this對象,在創建實例的時候會報錯

      比如constructor中調用父類的的constructor的時候,在子類的從constructor中使用super(x,y);

    (2)父類的靜態方法也可以被子類繼承

    (3)super作為函數調用的時候(super()),代表父類的構造函數,只能在constructor中使用,super作為對象的時候(super.a()),在普通方法中,指向父類的原型對象,在靜態方法中,指向父類

  <11>mixin模式的實現

    mixin指的是多個對象合成一個新的對象,新對象具有各個組成成員的接口

    技術分享

  

es6 學習筆記5