Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник JavaScript

Object.defineProperty

Создаёт свойство с точными настройками: только для чтения, скрытое, с геттером.

Доступно с: ES5

Синтаксис

Object.defineProperty(obj, key, descriptor)

Параметры

ПараметрТипОписание
objobjectОбъект, у которого создаётся или меняется свойство.
keystring | symbolИмя свойства.
descriptorobjectОписание свойства: value, writable, enumerable, configurable или get и set.

Возвращаемое значение

objectТот же объект.

Примеры

Свойство только для чтения:

const user = {};
Object.defineProperty(user, 'id', { value: 42, writable: false });
 
user.id = 7;
 
console.log(user.id);

Результат:

42

Скрытое свойство не видно в Object.keys и JSON:

const user = { name: 'Anna' };
Object.defineProperty(user, 'password', { value: 'secret', enumerable: false });
 
console.log(Object.keys(user));
console.log(JSON.stringify(user));
console.log(user.password);

Результат:

[
  "name"
]
{"name":"Anna"}
secret

Примечания

По умолчанию все флаги (writable, enumerable, configurable) у свойств, созданных этим методом, равны false. У обычных свойств, созданных присваиванием, они равны true.

См. также

  • Object.freeze — Запрещает любые изменения объекта.
  • get / set — Свойства, за которыми скрываются функции: чтение вызывает get, запись — set.
  • Object.keys — Возвращает массив имён свойств объекта.

В учебнике

  • Неизменяемость данных — Изменяемые и неизменяемые данные в JavaScript: ссылки на объекты, копирование через spread, методы toSorted и with, Object.freeze и structuredClone.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.