類class通過 static 關(guān)鍵字定義靜態(tài)方法。不能在類的實例上調(diào)用靜態(tài)方法津畸,而應(yīng)該通過類本身調(diào)用。不需要實例化類必怜,即可直接通過該類來調(diào)用的方法肉拓,即稱之為“靜態(tài)方法”。將類中的方法設(shè)為靜態(tài)方法也很簡單梳庆,在方法前加上static關(guān)鍵字即可暖途。這樣該方法就不會被實例繼承!
1.類ClassMethod的a方法前有static關(guān)鍵字膏执, 表明該方法是一個靜態(tài)方法驻售, 可以直接在ClassMethod類上調(diào)用。靜態(tài)方法只能在靜態(tài)方法中調(diào)用,不能在實例方法中調(diào)用:
class ClassMethod{
static a(){
return "我是ClassMethod類中的胧后,實例方法芋浮,無須實例化抱环,可直接調(diào)用壳快!"
}
}
//通過類名直接調(diào)用
console.log(ClassMethod.a()) //我是ClassMethod類中的,實例方法镇草,無須實例化列林,可直接調(diào)用寇漫!
2.靜態(tài)方法調(diào)用同一個類中的其他靜態(tài)方法,可使用this關(guān)鍵字:
class ClassMethod{
static a(){
return '我只能被靜態(tài)方法調(diào)用'
}
static b(){
//通過靜態(tài)方法b來調(diào)用靜態(tài)方法a
console.log(this.a())
}
}
ClassMethod.b() //輸出:我只允許被靜態(tài)方法調(diào)用
3.通過實例方法來調(diào)靜態(tài)方法會報錯:
class ClassMethod{
static a(){
return '我只能被靜態(tài)方法調(diào)用'
}
b(){
console.log(this.a()) //TypeError: this.a is not a function
}
}
var obj=new ClassMethod()
obj.b()
4.父類的靜態(tài)方法,可以被子類繼承:
class ClassMethod {
static a() { //父類ClassMethod的靜態(tài)方法
return '我是父類的靜態(tài)方法a'
}
}
class Method extends ClassMethod {}
//子類Method可以直接調(diào)用父類的靜態(tài)方法a
console.log(Method.a()) // 輸出:我是父類的靜態(tài)方法a
5.如果想通過子類的靜態(tài)方法調(diào)用父類的靜態(tài)方法晨汹,需要從super對象上調(diào)用:
class ClassMethod {
static a() {
return '我是通過super來調(diào)取出來的'
}
}
class Method extends ClassMethod {
static b(){
return super.a()
}
}
console.log(Method.b()) /// 輸出:我是通過super來調(diào)取出來的
6.靜態(tài)屬性
靜態(tài)屬性指的是 Class 本身的屬性壹罚, 即Class.propname, 而不是定義在實例對象( this) 上的屬性:
class ClassMethod{
constructor(){
this.name='實例屬性'
}
}
ClassMethod.prop1='靜態(tài)屬性1'
ClassMethod.prop2='靜態(tài)屬性2'
console.log(ClassMethod.prop1,ClassMethod.prop2) //靜態(tài)屬性1 靜態(tài)屬性2