В JavaScript «геттеры» и «сеттеры» — это методы, которые используются для получения и установки значений свойств объекта соответственно. Эти методы обеспечивают удобный способ доступа и изменения значений свойств объекта без прямого доступа к внутренним данным объекта.

Вот пример простого объекта JavaScript с несколькими свойствами:

const person = {
  firstName: 'John',
  lastName: 'Doe',
  age: 25
};

Чтобы получить доступ к значениям этих свойств, вы обычно используете запись через точку, например:

console.log(person.firstName); // Output: 'John'
console.log(person.lastName); // Output: 'Doe'
console.log(person.age); // Output: 25

Однако, если вы хотите изменить значения этих свойств, вам потребуется прямой доступ к данным объекта, например:

person.firstName = 'Jane';
person.lastName = 'Smith';
person.age = 30;

Это может быть неудобно, особенно если у вас есть сложные объекты со многими свойствами, и вы хотите предоставить согласованный способ доступа и изменения значений этих свойств. Вот тут-то и появляются «геттеры» и «сеттеры».

«Геттеры» — это методы, которые используются для получения значений свойств объекта. Они определяются с помощью ключевого слова get, за которым следует имя свойства, к которому вы хотите получить доступ, например:

const person = {
  firstName: 'John',
  lastName: 'Doe',
  age: 25,

  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
};

В этом примере мы определили геттер fullName, который возвращает полное имя человека путем объединения свойств firstName и lastName. Чтобы использовать этот геттер, вы должны получить к нему доступ, как и к любому другому свойству, используя точечную нотацию:

console.log(person.fullName); // Output: 'John Doe'

«Сеттеры» — это методы, которые используются для установки значений свойств объекта. Они определяются с помощью ключевого слова set, за которым следует имя свойства, которое вы хотите изменить, например:

const person = {
  firstName: 'John',
  lastName: 'Doe',
  age: 25,

  set fullName(name) {
    const parts = name.split(' ');
    this.firstName = parts[0];
    this.lastName = parts[1];
  }
};

В этом примере мы определили сеттер fullName, который принимает строку, содержащую полное имя человека, и соответственно устанавливает свойства firstName и lastName. Чтобы использовать этот сеттер, вы должны присвоить ему значение, как и любому другому свойству, используя знак равенства:

person.fullName = 'Jane Smith';

console.log(person.firstName); // Output: 'Jane'
console.log(person.lastName); // Output: 'Smith'

«Геттеры» и «сеттеры» полезны, когда вы хотите предоставить согласованный и удобный способ доступа и изменения значений свойств объекта.