Object.getOwnPropertyDescriptor()

Метод Object.getOwnPropertyDescriptor() повертає дескриптор властивості для особистої властивості (такої, що присутня безпосередньо на об'єкті, а не у ланцюжку його прототипів) наданого об'єкта.

Синтаксис

Object.getOwnPropertyDescriptor(obj, prop)

Параметри

obj
Об'єкт, в якому потрібно знайти властивість.
prop
Ім'я або символ властивості, опис якої отримується.

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

Дескриптор наданої властивості, якщо така існує на об'єкті, інакше undefined.

Опис

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

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

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

Приклади

var o, d;

o = { get foo() { return 17; } };
d = Object.getOwnPropertyDescriptor(o, 'foo');
// d дорівнює {
//   configurable: true,
//   enumerable: true,
//   get: /*функція-гетер*/,
//   set: undefined
// }

o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, 'bar');
// d дорівнює {
//   configurable: true,
//   enumerable: true,
//   value: 42,
//   writable: true
// }

o = { [Symbol.for('baz')]: 73 }
d = Object.getOwnPropertyDescriptor(o, Symbol.for('baz')); 
// d дорівнює {
//   configurable: true,
//   enumerable: true,
//   value: 73,
//   writable: true
// }

o = {};
Object.defineProperty(o, 'qux', {
  value: 8675309,
  writable: false,
  enumerable: false
});
d = Object.getOwnPropertyDescriptor(o, 'qux');
// d дорівнює {
//   value: 8675309,
//   writable: false,
//   enumerable: false,
//   configurable: false
// }

Примітки

У ES5, якщо перший аргумент цього методу не є об'єктом (є примітивом), це спричинить помилку TypeError. У ES2015 перший аргумент, що не є об'єктом, буде спочатку приведений до об'єкта.

Object.getOwnPropertyDescriptor('foo', 0);
// TypeError: "foo" is not an object  // код ES5

Object.getOwnPropertyDescriptor('foo', 0);
// Об'єкт, повернений кодом ES2015: {
//   configurable: false,
//   enumerable: true,
//   value: "f",
//   writable: false
// }

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

Специфікація Статус Коментар
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.getOwnPropertyDescriptor' in that specification.
Standard Початкове визначення. Реалізоване у JavaScript 1.8.5.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.getOwnPropertyDescriptor' in that specification.
Standard
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.getOwnPropertyDescriptor' in that specification.
Draft

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
getOwnPropertyDescriptorChrome Full support 5Edge Full support 12Firefox Full support 4IE Full support 9
Full support 9
Partial support 8
Notes
Notes In Internet Explorer 8, this was only supported on DOM objects and with some non-standard behaviors. This was later fixed in Internet Explorer 9.
Opera Full support 12Safari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 5Samsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support
See implementation notes.
See implementation notes.

Див. також