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
// }

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

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

BCD tables only load in the browser

Див. також