JavaScript метод Object.getOwnPropertyDescriptor()

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

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

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

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

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

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

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

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

Показать браузеры
Совместимостьjavascript.builtins.Object.getOwnPropertyDescriptor
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
getOwnPropertyDescriptor✓5✓12✓4✓12✓5✓18✓4✓12✓5✓1.0✓4.4✓5

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

JavaScript синтаксис

JavaScript
Object.getOwnPropertyDescriptor( obj, prop );

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

ECMAScript: Object.getOwnPropertyDescriptor()

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

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

Исключения

Object: справочные сведения
Тип исключения Описание
TypeError null и undefined вызывают TypeError. Остальные примитивы преобразуются в объекты-обёртки.

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

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

Дескриптор до и после изменения

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

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.getOwnPropertyDescriptor(obj, 'myProperty2'))
Object.defineProperty(obj, 'myProperty2', { writable: false, enumerable: false })
console.log(Object.getOwnPropertyDescriptor(obj, 'myProperty2'))
console.log(Object.keys(obj))

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

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

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