不需要实例化类,即可直接通过该类来调用的方法,即称之为“静态方法”。将类中的方法设为静态方法也很简单,在方法前加上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