Menu
Coddy logo textTech

Ключевые слова get и set

Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 43 из 56.

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

Давайте создадим простой класс Person:

class Person {
  constructor(firstName, lastName) {
    this._firstName = firstName;
    this._lastName = lastName;
  }
  
  // Геттер для fullName
  get fullName() {
    return `${this._firstName} ${this._lastName}`;
  }
  
  // Сеттер для fullName
  set fullName(value) {
    const parts = value.split(' ');
    this._firstName = parts[0];
    this._lastName = parts[1];
  }
}

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

// Создаем новый объект Person
const person = new Person('John', 'Doe');

// Используем геттер
console.log(person.fullName); // Вывод: John Doe

// Используем сеттер
person.fullName = 'Jane Smith';

// Сеттер обновил внутренние свойства
console.log(person.fullName); // Вывод: Jane Smith

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

challenge icon

Задание

Вам дан класс User со свойством age. Ваша задача — добавить геттер и сеттер для age, которые:

  1. Геттер <strong>get age()</strong>: возвращает сохраненный возраст
  2. Сеттер <strong>set age(newAge)</strong>: проверяет, что возраст находится в диапазоне от 0 до 120
    • Если значение валидно (0-120): сохраните его в this._age
    • Если значение невалидно: не изменяйте его и выведите в лог "Invalid age!"

Шпаргалка

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

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

class Person {
  constructor(firstName, lastName) {
    this._firstName = firstName;
    this._lastName = lastName;
  }
  
  get fullName() {
    return `${this._firstName} ${this._lastName}`;
  }
}

Сеттер — используйте ключевое слово set для определения метода, который принимает значение:

class Person {
  set fullName(value) {
    const parts = value.split(' ');
    this._firstName = parts[0];
    this._lastName = parts[1];
  }
}

Использование — обращайтесь к геттерам и сеттерам как к свойствам (без круглых скобок):

const person = new Person('John', 'Doe');

// Использование геттера
console.log(person.fullName); // John Doe

// Использование сеттера
person.fullName = 'Jane Smith';
console.log(person.fullName); // Jane Smith

Попробуйте сами

import { User } from './user.js';

// Тестовый код - не изменять
const user = new User("Alice", 25);
console.log(user.age);      // Должно вывести 25

user.age = 30;
console.log(user.age);      // Должно вывести 30

user.age = 150;             // Должно показать "Invalid age!"
console.log(user.age);      // Все еще должно выводить 30 (без изменений)

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование