Menu
CoddyTech

Ключевые слова 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];
  }
}

Подчёркивание в _firstName и _lastName — это соглашение об именовании: оно сообщает другим разработчикам, что эти свойства являются внутренними и их следует читать и изменять через геттер и сеттер, а не напрямую. JavaScript не обеспечивает соблюдение этого соглашения.

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

// Создайте новый экземпляр 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. Геттер get age(): возвращает сохранённый возраст
  2. Сеттер set age(newAge): проверяет, что возраст находится в диапазоне от 0 до 120
    • Если значение допустимо (0-120): сохраните его в this._age
    • Если значение недопустимо: не изменяйте его и выведите в журнал "Invalid age!"

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

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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор JavaScript