Ответ
Плюсы:
- Инкапсуляция: скрывают внутреннюю реализацию, позволяя менять её без изменения API
- Валидация: сеттеры могут проверять данные перед записью
- Логирование: удобно добавлять логирование изменений
- Вычисляемые свойства: геттеры могут динамически вычислять значения
- Совместимость: можно заменить обычные свойства на get/set без изменения кода, который их использует
Минусы:
- Неожиданное поведение: вызов метода выглядит как обращение к свойству
- Производительность: могут быть медленнее обычных свойств
- Сложность отладки: стек вызовов становится менее очевидным
- Избыточность: для простых случаев могут усложнять код
class User {
constructor() {
this._name = '';
}
get name() {
return this._name.toUpperCase();
}
set name(value) {
if (value.length < 2) throw new Error('Name too short');
this._name = value;
}
}