基本用法
- 作用相當于一個構造函數(shù)
- 通過關鍵詞
class
來定義類/實現(xiàn)類的繼承 - 靜態(tài)屬性的用關鍵字
static
修飾 -
constructor
為類的構造方法晨横,會自執(zhí)行 - 類的一般方法,相當于定義在實例對象的原型對象上
class Person {
// 類的靜態(tài)屬性,關鍵字static撕氧,給類自身添加屬性
static staticFun = function() {
console.log('類的靜態(tài)屬性腐宋,關鍵字static,給類自身添加屬性');
};
// constructor 類的構造方法伺糠,會自執(zhí)行
constructor(name, age) {
console.log('執(zhí)行類的構造方法');
this.name = name;
this.age = age;
}
/**
* 類的一般方法:
* 相當于定義在實例對象的原型對象上
* 即若Person為一個構造函數(shù)蒙谓,則類的一般方法相當于 Person.prototype.showMsg
**/
showMsg() {
console.log(this.name, ' & ', this.age);
}
};
繼承
- 通過關鍵詞
extends
來實現(xiàn)類的繼承 - 通過
super()
調用父類的構造方法 - 重寫從父類繼承的一般方法
// 父類復用上面的Person
// 子類
class childPerson extends Person {
constructor(name, age, sex) {
super(name, age); // 調用父類的構造方法
this.sex = sex;
}
// 直接重寫一般方法
showMsg() {
console.log(this.name, ' & ', this.age, ' & ', this.sex);
}
}
let child1 = new childPerson('zhangsan', 50, '男');
另:若之前學習的構造函數(shù)的繼承方式有所遺忘,可參考原型训桶、原型鏈累驮、及拓展(繼承模式)
特點
參考:https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/20
- class 聲明會提升,但不會初始化賦值舵揭。(類似于 let谤专、const 聲明變量;)
- class 聲明內部會啟用嚴格模式午绳;
- class 的所有方法(包括靜態(tài)方法和實例方法)都是不可枚舉的置侍;
- class 的所有方法(包括靜態(tài)方法和實例方法)都沒有原型對象 prototype,所以也沒有 [[constructor]]拦焚,不能使用 new 來調用蜡坊;
- 必須使用 new 來調用 class;
- class 內部無法重寫類名赎败;