不需要實例化類,即可直接通過該類來調用的方法,即稱之為“靜態方法”。將類中的方法設為靜態方法也很簡單,在方法前加上static關鍵字即可。這樣該方法就不會被實例繼承!
class Box{static a(){return "我是Box類中的,實例方法,無須實例化,可直接調用!"} } //通過類名直接調用 console.log(Box.a());//我是Box類中的,實例方法,無須實例化,可直接調用!
上面的代碼一,類Box的a方法前有static關鍵字, 表明該方法是一個靜態方法, 可以直接在Box類上調用。靜態方法只能在靜態方法中調用,不能在實例方法中調用。
class Box{static a(){return "我只允許被靜態方法調用哦!"}static b(){//通過靜態方法b來調用靜態方法aconsole.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
?