前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >es6中class类的全方面理解(三)---静态方法

es6中class类的全方面理解(三)---静态方法

作者头像
用户1272076
发布2019-03-26 16:36:10
8860
发布2019-03-26 16:36:10
举报
文章被收录于专栏:张培跃张培跃

不需要实例化类,即可直接通过该类来调用的方法,称之为“静态方法”。将类中的方法设为静态方法也很简单,在方法前加上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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张培跃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 静态属性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档