You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将全局变量count声明为Square类的类全局变量?

如何将全局count变量转为Square类的类级变量?

当然可以,你只需要把count定义为Square类的静态属性,这样它就属于类本身而非单个实例,同时不会污染全局作用域。

修改后的代码如下:

class Square{
    static count = 0; // 将count声明为类的静态属性
    constructor(sides){
        this.sides = sides;
        Square.count++;
    }
    getArea(){
        Square.count++;
        return this.sides * this.sides;
    }
    setSides(sides){
        Square.count++;
        this.sides = sides;
    }
    static getCurrentSides(){
        return Square.count;
    }
}
const square = new Square(20);
console.log(square.getArea()); // 输出400
square.setSides(8);
console.log(square.getArea()); // 输出64
console.log(Square.getCurrentSides()); // 输出4

关键改动说明:

  • 移除全局的count=0,在类内部用static count = 0声明静态属性,这是ES6+支持的类内部静态属性写法,简洁直观。
  • 所有原来引用全局count的位置,统一改为访问Square.count(实例方法和静态方法都适用)。如果考虑子类继承场景,实例方法里也可以用this.constructor.count,这样能自动指向当前实例所属类的静态属性。
  • 修改后代码的运行结果和原代码完全一致,但count现在是Square类的类级变量,不再暴露在全局作用域中。

如果需要更严格的封装,还可以用私有静态属性(ES2022+支持),把static count = 0改成static #count = 0,然后类内部访问时用Square.#count,这样外部无法直接修改这个变量,安全性更高:

class Square{
    static #count = 0; // 私有静态属性
    constructor(sides){
        this.sides = sides;
        Square.#count++;
    }
    getArea(){
        Square.#count++;
        return this.sides * this.sides;
    }
    setSides(sides){
        Square.#count++;
        this.sides = sides;
    }
    static getCurrentSides(){
        return Square.#count;
    }
}
// 外部无法访问Square.#count,只能通过静态方法getCurrentSides获取

内容的提问来源于stack exchange,提问作者user10704605

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:26:17