不需要實例化類,即可直接通過該類來調用的方法,即稱之為“靜態方法”。將類中的方法設為靜態方法也很簡單,在方法前加上static關鍵字即可。這樣該方法就不會被實例繼承!
class Box{
static a(){
return "我是Box類中的,實例方法,無須實例化,可直接調用!"
}
}
//通過類名直接調用
console.log(Box.a());//我是Box類中的,實例方法,無須實例化,可直接調用!
上面的代碼一,類Box的a方法前有static關鍵字, 表明該方法是一個靜態方法, 可以直接在Box類上調用。靜態方法只能在靜態方法中調用,不能在實例方法中調用。
class Box{
static a(){
return "我只允許被靜態方法調用哦!"
}
static b(){
//通過靜態方法b來調用靜態方法a
console.log(this.a());
}
}
Box.b();//輸出:我只允許被靜態方法調用 哦
通過實例方法來調靜態方法會報錯:
class Box{
static a(){
return "我只允許被靜態方法調用哦!"
}
b(){
console.log(this.a());//TypeError: this.a is not a function
}
}
var obj=new Box();
obj.b();
父類的靜態方法, 可以被子類繼承:
class Box {
static a() {//父類Box的靜態方法
return '我是父類的靜態方法a';
}
}
class Desk extends Box {}
//子類Desk可以直接調用父類的靜態方法a
console.log(Desk.a());
倘若想通過子類的靜態方法調用父類的靜態方法,需要從super對象上調用:
class Box {
static a() {
return '我是通過super來調取出來的';
}
}
class Desk extends Box {
static a(){
return super.a();
}
}
console.log(Desk.a());
靜態屬性
靜態屬性指的是 Class 本身的屬性, 即Class.propname, 而不是定義在實例對象( this) 上的屬性。
class Box{
constructor(){
this.name="實例屬性"
}
}
Box.prop1="靜態屬性1";
Box.prop2="靜態屬性2";
console.log(Box.prop1,Box.prop2);//靜態屬性1 靜態屬性2
