ПРОГРАММИРОВАНИЕ03 августа

Класс в JavaScript

В JavaScript класс — это шаблон для создания объектов с предварительно определенными свойствами и методами. Классы были введены в ECMAScript 6 (ES6) и представляют собой синтаксический сахар поверх существующей прототипной системы наследования.

Основные элементы класса в JavaScript

  • Конструктор (constructor): специальный метод, который вызывается при создании нового объекта.
  • Методы (methods): функции, определенные внутри класса, которые могут быть вызваны на созданных объектах.
  • Свойства (properties): переменные, которые принадлежат объекту, созданному на основе класса.

Пример определения класса в JavaScript

javascript

 

Объяснение примера:

  1. Конструктор: метод constructor инициализирует объект с переданными значениями name и age.
  2. Методы:
    • introduce выводит сообщение, используя свойства объекта.
    • getAge возвращает значение свойства age.
    • setAge устанавливает новое значение свойства age, проверяя его корректность.
  3. Создание объекта: оператор new создает новый экземпляр класса Person с переданными аргументами.
  4. Доступ к методам и свойствам: методы класса вызываются для получения или изменения свойств объекта.

В JavaScript свойства get и set позволяют определить геттеры и сеттеры для класса.

Геттеры используются для получения значения свойства, а сеттеры — для установки значения свойства с дополнительной логикой.

Пример использования геттеров и сеттеров в классе

// Определение класса
class Person {
  // Конструктор
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  // Метод
  introduce() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }

  // Геттер для имени
  get name() {
    return this._name;
  }

  // Сеттер для имени
  set name(newName) {
    if (newName && newName.length > 0) {
      this._name = newName;
    } else {
      console.log('Name must be a non-empty string.');
    }
  }

  // Геттер для возраста
  get age() {
    return this._age;
  }

  // Сеттер для возраста
  set age(newAge) {
    if (newAge > 0) {
      this._age = newAge;
    } else {
      console.log('Age must be a positive number.');
    }
  }
}

// Создание объекта класса Person
const person = new Person('Alice', 30);

// Вызов метода
person.introduce(); // Output: Hello, my name is Alice and I am 30 years old.

// Доступ к свойствам через геттеры
console.log(person.name); // Output: Alice
console.log(person.age); // Output: 30

// Установка новых значений через сеттеры
person.name = 'Bob';
person.age = 25;

// Проверка установленных значений
console.log(person.name); // Output: Bob
console.log(person.age); // Output: 25

// Попытка установки некорректных значений
person.name = ''; // Output: Name must be a non-empty string.
person.age = -5; // Output: Age must be a positive number.

Объяснение примера:

  1. Поля: this._name и this._age — это приватные поля, которые мы используем для хранения значений свойств. Принято использовать подчеркивание в начале имени для обозначения приватных полей.
  2. Геттеры и сеттеры:
    • Геттер name возвращает значение приватного поля _name.
    • Сеттер name проверяет, что новое имя не пустое, прежде чем установить его.
    • Геттер age возвращает значение приватного поля _age.
    • Сеттер age проверяет, что новый возраст положительный, прежде чем установить его.
  3. Использование геттеров и сеттеров:
    • Геттеры позволяют получить значения полей, обращаясь к ним как к обычным свойствам (person.name и person.age).
    • Сеттеры позволяют установить новые значения для полей с валидацией (person.name = 'Bob' и person.age = 25).
  4. Проверка некорректных значений:
    • При попытке установить пустое имя сеттер name выводит сообщение об ошибке.
    • При попытке установить отрицательный возраст сеттер age выводит сообщение об ошибке.

Геттеры и сеттеры делают код более элегантным и позволяют добавлять логику в процесс получения и установки значений свойств, обеспечивая дополнительную защиту и контроль.

 

Комментарии

Добавить комментарий:

Отметьте что вы не робот

Вернуться наверх