У меня есть Квадрат ниже класса,
Теперь переменная count находится в глобальном пространстве независимо от класса Square.
Могу ли я объявить переменную count внутри класса, чтобы сделать ее глобальной переменной класса?
count=0;
class Square{
constructor(sides){
this.sides = sides;
count++;
}
getArea(){
count++;
return this.sides*this.sides;
}
setSides(sides){
count++;
this.sides = sides;
}
static getCurrentSides(){
return count;
}
}
const square = new Square(20);
console.info(square.getArea());
square.setSides(8);
console.info(square.getArea());
console.info(Square.getCurrentSides());Термин, который вы ищете, — это статический член (который является синонимом глобальной переменной класса)… который вы уже использовали для getCurrentSides(). Так что просто добавьте static count = 0; поверх своего класса.
@ devnull69, но можешь ли ты изменить значение статического члена?
Да, конечно ты можешь



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если я правильно вас понял, вы хотите, чтобы переменная count была неглобальной. Это может означать две вещи. Либо вы хотите, чтобы он был доступен снаружи, но не для глобального объекта (window в контексте браузера), либо вы хотите, чтобы он был недоступен снаружи класса.
Если он первый, вы можете объявить его внутри класса, но сделать статическим:
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;
}
}
const square = new Square(20);
console.info(square.getArea());
square.setSides(8);
console.info(square.getArea());
console.info(Square.getCurrentSides());Таким образом, Square.count по-прежнему будет доступен (читаем и записываем) везде, где Square доступен.
Если вы хотите, чтобы count был полностью приватным, вы можете создать переменную с областью действия блока:
let Square;
{
let count = 0;
Square = class Square {
constructor(sides){
this.sides = sides;
count++;
}
getArea(){
count++;
return this.sides*this.sides;
}
setSides(sides){
count++;
this.sides = sides;
}
static getCurrentSides(){
return count;
}
}
}
const square = new Square(20);
console.info(square.getArea());
square.setSides(8);
console.info(square.getArea());
console.info(Square.getCurrentSides());То же самое можно сделать, используя приватное статическое поле, но оно стало доступно лишь недавно, поэтому поддержка может отличаться:
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;
}
}
const square = new Square(20);
console.info(square.getArea());
square.setSides(8);
console.info(square.getArea());
console.info(Square.getCurrentSides());Первый случай в вашем ответе - это то, что я искал.
Вы можете объявить переменную внутри класса, чтобы сделать ее переменной уровня класса.