Метод Object.getOwnPropertyDescriptor()
повертає дескриптор властивості для особистої властивості (такої, що присутня безпосередньо на об'єкті, а не у ланцюжку його прототипів) наданого об'єкта.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
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 (ECMA-262) The definition of 'Object.getOwnPropertyDescriptor' in that specification. |
Living Standard |
Сумісність з веб-переглядачами
BCD tables only load in the browser