上面兩章介紹了一些es6的方法和循環的差異,前端的同學肯定對類,泛型,接口,有些陌生。
口上說出這些話的人,一般都是后台,當然也有前端童鞋知道。以我個人學習的以及個人的思考分享給大家。
啥是類?
想想這個一個場景,當我們使用面對對象的方式來構建一個項目,寫在一個文件中,但是這個項目很大,設計的模塊也比較多。
這個時候,就需要一個頂級的對象,下面有三個二級對象,6個三級對象,呈現金字塔的形狀,這個時候,三級對象想訪問頂部對象咋辦?只能繼承唄?
但是在js(以前)中是沒有繼承的概念的,當然你也可以手動實現一個。是不是又多了一個文件?而且如果有多級對象,我想知道它是不是屬於誰下的對象?
遇到的問題很多,只能是一個項目一個對象的設計,不可復用,一些相似的場景下是可以的。但是遠遠沒有到解決問題的程度。
class 類的概念就是為了解決這個問題的。如果對類還沒有概念,把他想想成一個原型鏈!
類的構成:類分為兩個部分,類的內部,類的外部
class Person{ //這是內部
name;
eat();
//這里設置屬性,是否可以被外部訪問 constructor(){ console.log('hah') } } //類的外部
類的屬性有哪些?又稱為控制符
public:設置內部和外部都可以訪問。 private:私有的,只有類的內部才可以訪問。 protected:受保護的,類的內部和子類可以訪問,其他無法訪問。 constructor:類的構造函數,當類被實例化的時候被調用一次,調用的是new 一次,也只會new一次。 extends:繼承另一個類,繼承父類的所有屬性和方法。 //這個時候有個場景,想把父類中的name傳入給子類,使用super(name),這樣就傳過去了,如果子類想訪問父類,很簡單,父類.方法。 泛型:參數化的類型,一般用來限制集合的內容。 //舉個栗子,var workers:Array<Person>=[]; //給參數workers指定是數組類型,指定是Person,默認值是數組。 //使用該參數,放進去的數組只能是屬於Person的(子類也可以),不屬於Person的類就會報錯 接口:用來建立某種代碼約定,使得其他開發者在調用某個方法或者創建一個新的類的時候必須遵循接口所定義的代碼約定
readonly:可以聲明該屬性是只讀的
static:靜態屬性 我們也可以創建類的靜態成員,這些屬性存在於類本身上面而不是類的實例上。
類型斷言:我知道這個值的類型是什么,那么我就給他設置一個限制,例如
let someValue: any = "this is a string";
//我知道strLength的值為number但是,someValue為字符串,就可以這么判斷
//let strLength: number = (<string>someValue).length;
//另一種語法:as
//let strLength: number = (someValue as string).length;
enum類型是對JavaScript標准數據類型的一個補充。 像C#等其它語言一樣,使用枚舉類型可以為一組數值賦予友好的名字。
栗子:
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
alert(colorName); // 顯示'Green'因為上面代碼里它的值是2
