zoukankan      html  css  js  c++  java
  • es6中class类的全方面理解(三)------静态方法

    不需要实例化类,即可直接通过该类来调用的方法,即称之为“静态方法”。将类中的方法设为静态方法也很简单,在方法前加上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
  • 相关阅读:
    CodeForces 7B
    CodeForces 4D
    离散化
    线段树入门
    洛谷 P3951 小凯的疑惑(赛瓦维斯特定理)
    Codeforces 1295D Same GCDs (欧拉函数)
    Codeforces 1295C Obtain The String (二分)
    Codeforces 1295B Infinite Prefixes
    Codeforces 1295A Display The Number(思维)
    Codeforces 1294F Three Paths on a Tree(树的直径,思维)
  • 原文地址:https://www.cnblogs.com/catbrother/p/9397193.html
Copyright © 2011-2022 走看看