Глобальная переменная в классе

У меня есть Квадрат ниже класса,

Теперь переменная 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());

Вы можете объявить переменную внутри класса, чтобы сделать ее переменной уровня класса.

Amit Mohanty 22.09.2023 09:13

Термин, который вы ищете, — это статический член (который является синонимом глобальной переменной класса)… который вы уже использовали для getCurrentSides(). Так что просто добавьте static count = 0; поверх своего класса.

devnull69 22.09.2023 09:14

@ devnull69, но можешь ли ты изменить значение статического члена?

Shoyeb Sheikh 22.09.2023 09:15

Да, конечно ты можешь

devnull69 22.09.2023 09:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно вас понял, вы хотите, чтобы переменная 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());

Первый случай в вашем ответе - это то, что я искал.

Shoyeb Sheikh 22.09.2023 09:35

Другие вопросы по теме