Проверяет понимание разницы между обычным свойством объекта и геттером, что важно для осознанного проектирования объектов и работы с инкапсуляцией в JavaScript.
В JavaScript свойство объекта может быть либо обычным значением (data property), либо аксессором (accessor property) — геттером или сеттером. Снаружи обращение выглядит одинаково: obj.value. Но внутри поведение принципиально разное.
Обычное свойство хранит значение в самом объекте. При чтении движок просто возвращает то, что лежит в памяти. При записи — перезаписывает значение.
const user = { name: 'Alice' };
console.log(user.name); // 'Alice'
user.name = 'Bob';
console.log(user.name); // 'Bob'Геттер — это функция, которая вызывается при каждом чтении свойства. Значение не хранится, а вычисляется. Это удобно для производных данных, ленивых вычислений и инкапсуляции.
const user = {
firstName: 'Alice',
lastName: 'Smith',
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
};
console.log(user.fullName); // 'Alice Smith'
user.firstName = 'Bob';
console.log(user.fullName); // 'Bob Smith'Object.defineProperty или синтаксис get в литерале/классе.Обычные свойства — для простых данных. Геттеры — когда значение зависит от других полей, требует вычислений или должно быть защищено от прямой записи. Например, в классах часто делают геттер area для фигуры, который считает площадь из ширины и высоты.
Итог: используйте геттеры для вычисляемых и защищённых значений, а обычные свойства — для простого хранения данных, чтобы не усложнять код без необходимости.