Object.getOwnPropertyDescriptors()

Метод Object.getOwnPropertyDescriptors() повертає дескриптори всіх особистих властивостей наданого об'єкта.

Синтаксис

Object.getOwnPropertyDescriptors(obj)

Параметри

obj
Об'єкт, для якого потрібно отримати дескриптори всіх особистих властивостей.

Значення, що повертається

Об'єкт, що містить дескриптори всіх особистих властивостей об'єкта. Може бути порожній об'єкт, якщо властивостей немає.

Опис

Цей метод дозволяє вивчити докладний опис усіх особистих властивостей об'єкта. Властивість у JavaScript складається з імені у вигляді рядка або символа та дескриптора властивості. Більше інформації щодо типів дескрипторів властивостей та їхніх атрибутів можна знайти у статті Object.defineProperty().

Дескриптор властивості - це запис, що має деякі з наступних атрибутів:

value
Значення, пов'язане з властивістю (тільки у дескрипторах даних).
writable
Дорівнює true тоді й тільки тоді, коли значення, пов'язане з властивістю, може бути змінене (тільки у дескрипторах даних).
get
Функція, що служить гетером властивості, або undefined, якщо гетера немає (тільки у дескрипторах доступу).
set
Функція, що служить сетером властивості, або undefined, якщо сетера немає (тільки у дескрипторах доступу).
configurable
Дорівнює true тоді й тільки тоді, коли тип цього дескриптора властивості може бути змінений, та якщо властивість може бути видалена з відповідного об'єкта.
enumerable
Дорівнює true тоді й тільки тоді, коли ця властивість з'являється під час переліку властивостей на відповідному об'єкті.

Приклади

Створення дрібного клону

В той час як метод Object.assign() скопіює лише особисті та перелічувані властивості з наданого об'єкта у цільовий, ви можете скористатись цим методом та Object.create() для дрібного копіювання між двома невідомими об'єктами:

Object.create(
  Object.getPrototypeOf(obj), 
  Object.getOwnPropertyDescriptors(obj) 
);

Створення підкласу

Типовим способом створення підкласу є визначити підклас, присвоїти його прототипу екземпляр суперкласу, і далі визначити властивості на цьому екземплярі. Це може бути незграбно, особливо для гетерів та сетерів. Ви можете натомість скористатись даним кодом для призначення прототипу:

function superclass() {}
superclass.prototype = {
  // Визначте тут свої методи та властивості
};
function subclass() {}
subclass.prototype = Object.create(
  superclass.prototype,
  {
    // Визначте тут свої методи та властивості
  }
);

Специфікації

Специфікація Статус Коментар
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.getOwnPropertyDescriptors' in that specification.
Draft Початкове визначення у ECMAScript 2017.
ECMAScript 2017 (ECMA-262)
The definition of 'Object.getOwnPropertyDescriptors' in that specification.
Standard

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
getOwnPropertyDescriptorsChrome Full support 54Edge Full support 15Firefox Full support 50IE No support NoOpera Full support 41Safari Full support 10WebView Android Full support 54Chrome Android Full support 54Firefox Android Full support 50Opera Android ? Safari iOS ? Samsung Internet Android Full support 6.0nodejs Full support 7.0.0
Full support 7.0.0
Full support 6.5.0
Disabled
Disabled From version 6.5.0: this feature is behind the --harmony runtime flag.

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
User must explicitly enable this feature.
User must explicitly enable this feature.

Див. також