Как правильно использовать get и set в классах?

В JavaScript, ключевые слова get и set используются для определения геттеров и сеттеров свойств объектов класса. Они позволяют получать и устанавливать значения свойств через вызовы функций, скрывая сложную логику или обеспечивая дополнительные проверки перед установкой или получением значений.

Обычно, при объявлении класса, свойства определяются в конструкторе. Однако, с ключевыми словами get и set, мы можем обращаться к свойствам объекта, как к обычным переменным или полям класса, но при этом иметь возможность контролировать их чтение и запись.

Давайте рассмотрим простой пример класса с использованием get и set:

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  get name() {
    return this._name;
  }

  set name(value) {
    this._name = value;
  }

  get age() {
    return this._age;
  }

  set age(value) {
    if (value >= 0) { // Простая проверка на положительное значение возраста
      this._age = value;
    } else {
      console.error("Ошибка! Возраст должен быть положительным числом.");
    }
  }
}

В этом примере мы создаем класс Person с двумя свойствами: name и age. Публичные методы-геттеры и сеттеры для этих свойств используются для доступа к приватным переменным _name и _age.

Геттеры и сеттеры определены с использованием ключевых слов get и set. В get-методе возвращается значение приватной переменной, а в set-методе устанавливается значение для приватной переменной. Внутри сеттеров мы можем добавить любую логику проверки перед установкой значения свойства.

Теперь рассмотрим как использовать этот класс:

const person = new Person("John Doe", 30);
console.log(person.name); // Выведет "John Doe"
person.name = "Jane Smith";
console.log(person.name); // Выведет "Jane Smith"
console.log(person.age); // Выведет 30
person.age = -10; // Выведет ошибку в консоль

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

Таким образом, использование get и set позволяет нам легко контролировать доступ к свойствам объекта и предоставлять дополнительные функциональности при чтении или записи этих свойств. Это особенно полезно при необходимости внести изменения в логику или обработать значения перед их использованием.