JavaScript классы - основы, наследование и приватные свойства

Преимущества использования классов в программировании, вместо функции конструктор в JavaScript:

  1. Организация кода: Использование классов способствует большей организации кода, позволяя группировать свойства и методы, относящиеся к одному объекту в один модуль.
  2. Облегчение создания объектов: Классы предоставляют удобный способ создания новых объектов. Конструктор класса определяет, какие свойства имеет объект и устанавливает их по умолчанию при создании нового экземпляра.
  3. Наследование и расширение: Классы поддерживают наследование, что позволяет создавать новые классы на основе существующих. Это уменьшает дублирование кода и позволяет использовать свойства и методы родительского класса.
  4. Понятность: Использование классов делает код более понятным разработчикам, поскольку они могут легко определить структуру объектов и их возможности.
  5. Модульность: Классы способствуют модульности, позволяющей структурировать программу по концепции объектно-ориентированного программирования (ООП).

JavaScript использует прототипное наследование, благодаря чему каждый объект может наследовать свойства и методы другого объекта. Прототипы - сильная часть языка, однако не всегда понятная. В базовом варианте это выглядит так:

/**
 * Функция-конструктор для создания объекта Person
 */
function Person(name, age) {
  this.name = name;
  this.age = age;
}
 
// Добавление метода greet в прототип объекта Person
Person.prototype.greet = function() {
  console.log(`Привет, меня зовут ${this.name} и мне ${this.age} лет.`);
};
 
// Создание объекта с помощью функции-конструктора
const person1 = new Person("Иван", 25);
person1.greet(); // "Привет, меня зовут Иван и мне 25 лет."

В этом примере функция Person выступает как конструктор, который создаёт новый объект со свойствами name и age. Метод greet добавляется в прототип объекта, чтобы все объекты, созданные с помощью конструктора Person, могли использовать этот метод.

Однако в современном JavaScript существуют классы, которые предоставляют более удобный и понятный способ создания объектов. Например, определим класс Person, который будет иметь свойства "имя" и "возраст", а также метод "поприветствовать":

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
 
  greet() {
    console.log(`Привет, меня зовут ${this.name} и мне ${this.age} лет.`);
  }
}
 
// Создание объекта с помощью класса
const person1 = new Person("Иван", 25);
person1.greet(); // "Привет, меня зовут Иван и мне 25 лет."

В современном JavaScript для настоящей приватности используют символ #:

class Person {
  #salary;
  constructor(name, salary) {
    this.name = name;
    this.#salary = salary;
  }
  getSalary() { return this.#salary; }
}

#salary - полностью приватное свойство, к нему нельзя обратиться извне.

Ранее для "приватности" использовали подчёркивание, но это только соглашение:

class Person {
  constructor(name, salary) {
    this.name = name;
    this._salary = salary;
  }
}

_salary - обычное свойство, к нему есть доступ снаружи.

Вывод:

  • # - настоящая приватность (ES2022+).
  • _ - только соглашение, не защищает свойство.

Читайте также: JavaScript: функции-конструкторы, создание объектов и прототипы, Три свойства ООП Объектно-ориентированное программирование

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!