JavaScript是一門解釋性語言,但它也跟其他語言有相通的地方,比如類,js中的類與Java中的類的概念是一樣的,只不過是js中的類貌似沒有Java中的複雜(可能是我還沒到達一定的深度)。對於我這種只是停留在瞭解不瞭解Java語言的人來說,還是有一定的基礎的。哈哈哈哈哈哈。還是正事比較重要。
類的創建
還是先簡單說下類和對象的概念吧。類是指具有相同的屬性和方法抽象出來的一類事物,比如說車、衣服、書、數據庫等,都可以看作是類。對象呢,是指一個具體的事物,通過類的實例化得到的,即對象也叫類的實例化。比如紅色的車、我穿的一件上衣、我在看的這本書、正在使用的數據庫,具體的事物就是對象。
類和對象說完了,咱就開始試試手,光說不練假把式啊,創建類實現纔是真理。
創建類的語法
class name{ constructor(形參){ } 方法名([形參]){ } }
其中constructor是類的構造器也叫構造函數,constructor用來接受形參,然後返回實例對象。constructor在創建類時可以不寫,系統也會自動生成對應得constructor函數的。
類創建完了,下一步就是生成對象了,new關鍵字。
來個明星類吧。再實例化對象
class Star {
// 構造函數裏面的參數是用來接受實例的參數,可以理解爲是實例對象的屬性
constructor(sname, sage) {
this.sname = sname;
this.sage = sage;
}
// 方法
say(work) {
console.log(this.sname + "出演" + work);
}
}
// new 關鍵字出現 會自動調用construct函數
var lyf = new Star('李易峯');
lyf.say("古劍奇譚");
console.log(lyf);
你看你看結果
上面是一個簡單的例子,主要是體會一下類創建對象的過程。下一步,再來體會一下類的繼承。
類的繼承
繼承就是子類繼承父類的屬性和方法,同時子類還可以有自己的屬性和方法。繼承就是一個關鍵字extends。下面就表示Son類繼承Father類。繼承後子類可以使用父類的屬性方法。
class Son extends Father{}
舉個栗子:父類有加法的方法,子類只需繼承父類的加法方法,子類自己再擴展一個減法的方法。
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
// 計算加法
sum() {
return this.x + this.y;
}
}
// 繼承用extends關鍵字
// 子類繼承父類 子類可以使用父類的屬性和方法,同時子類還能自己擴展的屬性和方法
class Son extends Father {
// 子類要想使用父類的構造函數 必須用super()
constructor(x, y) {
// 把參數傳到父類的構造器的參數裏
// 這裏是把子類的兩個參數傳到父類的構造函數裏了
super(x, y); // 必須要寫在第一行 也就是子類的this之前
this.x = x;
this.y = y;
}
less() {
return this.x - this.y;
}
}
var father = new Father(2, 3);
var son = new Son(5, 8);
// 子類自己的方法
console.log(son.sum());
// 子類繼承了父類的加法
console.log(son.less());
這樣的實現跟Java中的繼承思想是一毛一樣的,就是用不同的語言實現的而已。
注意:super()方法,它是子類調用父類構造函數的方法,往裏面傳參數是調用父類的構造函數;同時super.方法名() 可以調用父類的普通函數的。emmmmm,我木有試。
一般的話我們都是用super()方法調用父類的構造函數。
類的創建和繼承,目前暫時就這麼多了,但是還有兩點需要注意。
- 類是沒有變量提升的,所以 必須先創建類,再能通過類去實例化對象,不能先實例化再去創建類。
- 類裏面的共有屬性和方法,必須要用this調用。在構造函數中,this指向實例化對象;在方法中,this指向方法的調用者