TypeScript类静态成员

类的定义中可以包含静态成员。类的静态成员不属于类的某个实例,而是属于类本身。类的静态成员使用static关键字定义,并且只允许通过类名来访问。

例如,下例中Circle类定义了静态成员变量version,它只允许通过类名Circle进行访问:

class Circle {
   static version: string = 'coolcou.com';
}

// 正确,结果为 'coolcou.com'
const version = Circle.version;

const circle = new Circle();
circle.version;
//     ~~~~~~~
//     编译错误!'version' 属性是 'Circle' 类的静态属性

静态成员可访问性

类的静态成员也可以定义不同的可访问性,如public、private和protected。

类的public静态成员对访问没有限制,可以在当前类的内部、外部以及派生类的内部访问。示例如下:

class Base {
    public static x: string = 'coolcou.com';

    a() {
        // 正确,允许在类内部访问公有静态成员 x
        Base.x;
    }
}

class Derived extends Base {
    b() {
        // 正确,允许在派生类内部访问公有静态成员 x
        Base.x;
    }
}

// 正确,允许在类外部访问公有静态成员 x
console.log(Base.x)

输出结果:

TypeScript类静态成员

类的protected静态成员允许在当前类的内部和派生类的内部访问,但是不允许在当前类的外部访问。示例如下:

class Base {
    protected static x: string = 'coolcou.com';

    a() {
        // 正确,允许在类内部访问受保护的静态成员 x
        Base.x;
    }
}

class Derived extends Base {
    b() {
        // 正确,允许在派生类内部访问受保护的静态成员 x
        Base.x;
    }
}

// 错误!不允许在类外部访问受保护的静态成员 x
Base.x;

类的private静态成员只允许在当前类的内部访问。示例如下:

class Base {
    private static x: string = 'coolcou.com';

    a() {
        // 正确,允许在类内部访问受保护的静态成员 x
        Base.x;
    }
}

class Derived extends Base {
    b() {
        // 错误!不允许在派生类内部访问受保护的静态成员 x
        Base.x;
    }
}

// 错误!不允许在类外部访问受保护的静态成员 x
Base.x;

继承静态成员

类的public静态成员和protected静态成员也可以被继承。例如,下例中派生类Derived继承了基类Base的静态成员xy

class Base {
   public static x: string = 'coolcou.com';
   protected static y: string = '';
}

class Derived extends Base {
   b() {
       // 继承了基类的静态成员 x
       Derived.x;

       // 继承了基类的静态成员 y
       Derived.y;
   }
}

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!