--- title: Object.getOwnPropertyDescriptor() slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor tags: - ECMAScript5 - JavaScript - Method - Object translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor ---
Метод Object.getOwnPropertyDescriptor() возвращает дескриптор свойства для собственного свойства (то есть такого, которое находится непосредственно в объекте, а не получено через цепочку прототипов) переданного объекта.
Object.getOwnPropertyDescriptor(obj, prop)
objpropДескриптор переданного свойства, если оно присутствует в объекте, либо {{jsxref("undefined")}}, если его там нет.
Этот метод позволяет просмотреть точное описание свойства. Свойство в JavaScript состоит из строкового имени и дескриптора свойства. Подробная информация о типах дескрипторов свойств и их атрибутах может быть найдена в описании метода {{jsxref("Object.defineProperty()")}}.
Дескриптор свойства — это запись с некоторыми из следующих атрибутов:
valuewritabletrue, если значение, ассоциированное со свойством, может быть изменено, иначе false (только в дескрипторе данных).getsetconfigurabletrue, если тип дескриптора этого свойства может быть изменён и если свойство может быть удалено из содержащего его объекта, иначе false.enumerabletrue, если это свойство доступно при перечислении свойств содержащего его объекта, иначе false.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 = {};
Object.defineProperty(o, 'baz', { value: 8675309, writable: false, enumerable: false });
d = Object.getOwnPropertyDescriptor(o, 'baz');
// d равен { value: 8675309, writable: false, enumerable: false, configurable: false }
В ES5, если первый аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет сначала приведён к объекту.
> Object.getOwnPropertyDescriptor('foo', 0)
TypeError: "foo" is not an object // код ES5
> Object.getOwnPropertyDescriptor('foo', 0)
{ configurable: false, enumerable: true, value: 'f', writable: false } // код ES6
| Спецификация | Статус | Комментарии |
|---|---|---|
| {{SpecName('ES5.1', '#sec-15.2.3.3', 'Object.getOwnPropertyDescriptor')}} | {{Spec2('ES5.1')}} | Изначальное определение. Реализована в JavaScript 1.8.5. |
| {{SpecName('ES6', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}} | {{Spec2('ES6')}} |
{{Compat}}