get / set
Свойства, за которыми скрываются функции: чтение вызывает get, запись — set.
Доступно с: ES5
Синтаксис
get name() { … } / set name(value) { … }Примеры
Вычисляемое свойство:
class User {
constructor(first, last) {
this.first = first;
this.last = last;
}
get fullName() {
return `${this.first} ${this.last}`;
}
}
console.log(new User('Anna', 'Smith').fullName);Результат:
Anna SmithПроверка значения при записи:
class Product {
#price = 0;
get price() {
return this.#price;
}
set price(value) {
if (value < 0) throw new RangeError('Price cannot be negative');
this.#price = value;
}
}
const tea = new Product();
tea.price = 5;
console.log(tea.price);
try {
tea.price = -1;
} catch (error) {
console.log(error.message);
}Результат:
5
Price cannot be negativeПримечания
К геттеру обращаются как к свойству, без скобок: user.fullName, а не user.fullName(). Геттер без сеттера делает свойство доступным только для чтения. Работает и в обычных объектах: { get total() { … } }.
См. также
- Private fields (#) — Поля и методы, доступные только внутри класса.
- class — Объявляет класс — шаблон для создания объектов с общими методами.
- Object.defineProperty — Создаёт свойство с точными настройками: только для чтения, скрытое, с геттером.
В учебнике
- Геттеры и сеттеры — Геттеры и сеттеры в классах JavaScript: вычисляемые свойства, проверка значений при записи и свойства только для чтения.