Ключевые слова 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Обратите внимание, что мы не вызываем эти методы с круглыми скобками. Они ведут себя точно так же, как свойства, но выполняют код при доступе или изменении.
Задание
Вам дан класс User со свойством age. Ваша задача — добавить геттер и сеттер для age, которые:
- Геттер
<strong>get age()</strong>: возвращает сохраненный возраст - Сеттер
<strong>set age(newAge)</strong>: проверяет, что возраст находится в диапазоне от 0 до 120- Если значение валидно (0-120): сохраните его в
this._age - Если значение невалидно: не изменяйте его и выведите в лог
"Invalid age!"
- Если значение валидно (0-120): сохраните его в
Шпаргалка
Геттеры и сеттеры — это специальные методы, которые выглядят как свойства, но выполняют код при обращении к ним или их изменении.
Геттер — используйте ключевое слово 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 (без изменений)
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Объекты и ключевое слово this
Краткий обзор: ОбъектыДобавление методов в объектыПонимание ключевого слова thisФункции-конструкторыКлючевое слово newИтоговое испытание7Наследование и ключевое слово extends
НаследованиеОтношение «is-a»Ключевое слово extendsМетод super()Наследование свойств и методовИтоговое испытание10Полиморфизм
Что такое полиморфизм?Переопределение унаследованных методовИспользование superИтоговое задание13Композиция против наследования
Отношения «has-a» и «is-a»Ограничения глубокого наследованияСоздание объектов2Организация кода
Что такое модули?Экспорт с помощью exportИмпорт с помощью importDefault против именованных экспортов5Инкапсуляция и доступ
ИнкапсуляцияПубличные и приватные поля классовПриватные методыЗадание на повторение8Организация кода ООП
Организация классов в модули11Проект: Отрисовщик фигур
Настройка: Класс Shape и экспортНаследование класса Circle14Система управления библиотекой
Проектирование библиотекиКласс Book с использованием композиции6Проект: Простой банковский счет
Класс BankAccountПополнение и снятие средств9Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление12Геттеры и сеттеры
Ключевые слова get и setВычисляемые свойстваВалидация и побочные эффектыИтоговое задание