JavaScript метод Object.getOwnPropertyDescriptors()

Определение и применение

JavaScript метод getOwnPropertyDescriptors() позволяет возвратить объект, содержащий дескрипторы всех собственных (неунаследованных) свойств заданного объекта. Дескрипторы свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства.

Подробную информацию о дескрипторах свойств вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.

null и undefined вызывают TypeError; другие примитивы преобразуются в объекты-обёртки. Строка имеет собственные перечислимые индексные свойства.

Учитываются неперечислимые и символьные собственные свойства. Получение дескриптора не вызывает геттер свойства. Возвращается новый объект дескриптора: изменение его полей само по себе не изменяет исходное свойство.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2017 года.

Показать браузеры
Совместимостьjavascript.builtins.Object.getOwnPropertyDescriptors
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
getOwnPropertyDescriptors✓54✓15✓50✓41✓10✓54✓50✓41✓10✓6.0✓54✓10

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
Object.getOwnPropertyDescriptors( obj );

Спецификация

ECMAScript: Object.getOwnPropertyDescriptors()

Значения параметров

Object: справочные сведения
Параметр Описание
obj Целевой объект в котором необходимо получить дескрипторы собственных (неунаследованных) свойств. Если в качестве значения передается объект в котором отсутствуют собственные (неунаследованные) свойства, то будет возвращен пустой объект. Обязательное значение.

Примеры, попробуйте сами

В примере «Дескрипторы всех собственных свойств» показан результат вызова метода.

Дескрипторы всех собственных свойств

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Дескрипторы всех собственных свойств</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
const obj = { myProperty: 1, myProperty2: 2 }
console.log(Object.getOwnPropertyDescriptors(obj))
Object.defineProperty(obj, 'myProperty2', { writable: false, enumerable: false })
console.log(Object.getOwnPropertyDescriptors(obj))
console.log(Object.keys(obj))

В этом примере мы инициализировали объект в котором указали два свойства, с использованием метода getOwnPropertyDescriptors() получили дескрипторы всех собственных (неунаследованных) свойств, которые содержат значения атрибутов.

После этого с использованием метода defineProperty() мы изменили свойство "myProperty2" объекта, описывая его дескриптором в котором указали, что свойство недоступно для записи (не допускается изменение свойства объекта с помощью оператора присваивания) и определили, что свойство не отображается при перечислении свойств объекта в котором оно содержится в цикле for...in, или при вызове метода Object.keys(), который возвращает массив, содержащий имена всех собственных перечислимых (неунаследованных) свойств указанного объекта.

И в заключении с использованием метода getOwnPropertyDescriptors() получили дескрипторы всех собственных (неунаследованных) свойств, как вы можете заметить у свойства "myProperty2" дескриптор изменился.