В JavaScript свойства объектов делятся на две категории: свойства-данные и свойства-аксессоры. Понимание различия между ними — ключ к эффективной работе с объектами.
Свойство-данное напрямую хранит значение. Оно имеет два ключевых дескриптора:
value — хранящееся значениеwritable — можно ли изменять значениеconst obj = { name: "Alice" };
// или явно:
Object.defineProperty(obj, "name", { value: "Alice", writable: true });
Свойство-аксессор не хранит значение напрямую. Вместо этого оно использует функции геттера и сеттера для вычисления или перехвата доступа:
get — вызывается при чтении свойстваset — вызывается при записи в свойствоconst obj = {
_age: 25,
get age() { return this._age; },
set age(val) { if (val > 0) this._age = val; }
};
Оба типа можно явно определить с помощью Object.defineProperty():
Object.defineProperty(obj, "age", {
get() { return this._age; },
set(val) { this._age = val; }
});
Свойство данных может одновременно иметь определённые дескриптор value и дескриптор get на одном и том же свойстве объекта.
Новый — ещё не проверен сообществом
Вы