Object.getOwnPropertyDescriptor()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Сводка
ÐеÑод Object.getOwnPropertyDescriptor() возвÑаÑÐ°ÐµÑ Ð´ÐµÑкÑипÑÐ¾Ñ ÑвойÑÑва Ð´Ð»Ñ ÑобÑÑвенного ÑвойÑÑва (Ñо еÑÑÑ Ñакого, коÑоÑое наÑ
одиÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно в обÑекÑе, а не полÑÑено ÑеÑез ÑепоÑÐºÑ Ð¿ÑоÑоÑипов) пеÑеданного обÑекÑа.
СинÑакÑиÑ
Object.getOwnPropertyDescriptor(obj, prop)
ÐаÑамеÑÑÑ
ÐозвÑаÑаемое знаÑение
ÐеÑкÑипÑÐ¾Ñ Ð¿ÐµÑеданного ÑвойÑÑва, еÑли оно пÑиÑÑÑÑÑвÑÐµÑ Ð² обÑекÑе, либо undefined, еÑли его Ñам неÑ.
ÐпиÑание
ÐÑÐ¾Ñ Ð¼ÐµÑод позволÑÐµÑ Ð¿ÑоÑмоÑÑеÑÑ ÑоÑное опиÑание ÑвойÑÑва. СвойÑÑво в JavaScript ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· ÑÑÑокового имени и деÑкÑипÑоÑа ÑвойÑÑва. ÐодÑÐ¾Ð±Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑипаÑ
деÑкÑипÑоÑов ÑвойÑÑв и иÑ
аÑÑибÑÑаÑ
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° в опиÑании меÑода Object.defineProperty().
ÐеÑкÑипÑÐ¾Ñ ÑвойÑÑва â ÑÑо запиÑÑ Ñ Ð½ÐµÐºÐ¾ÑоÑÑми из ÑледÑÑÑÐ¸Ñ Ð°ÑÑибÑÑов:
value-
ÐнаÑение, аÑÑоÑииÑованное Ñо ÑвойÑÑвом (ÑолÑко в деÑкÑипÑоÑе даннÑÑ ).
writable-
ÐнаÑение
true, еÑли знаÑение, аÑÑоÑииÑованное Ñо ÑвойÑÑвом, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾, инаÑеfalse(ÑолÑко в деÑкÑипÑоÑе даннÑÑ ). get-
ФÑнкÑиÑ, возвÑаÑаÑÑÐ°Ñ Ð·Ð½Ð°Ñение ÑвойÑÑва, либо
undefined, еÑли ÑÐ°ÐºÐ°Ñ ÑÑнкÑÐ¸Ñ Ð¾ÑÑÑÑÑÑвÑÐµÑ (ÑолÑко в деÑкÑипÑоÑе доÑÑÑпа). set-
ФÑнкÑиÑ, изменÑÑÑÐ°Ñ Ð·Ð½Ð°Ñение ÑвойÑÑва, либо
undefined, еÑли ÑÐ°ÐºÐ°Ñ ÑÑнкÑÐ¸Ñ Ð¾ÑÑÑÑÑÑвÑÐµÑ (ÑолÑко в деÑкÑипÑоÑе доÑÑÑпа). configurable-
ÐнаÑение
true, еÑли Ñип деÑкÑипÑоÑа ÑÑого ÑвойÑÑва Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñн и еÑли ÑвойÑÑво Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдалено из ÑодеÑжаÑего его обÑекÑа, инаÑеfalse. enumerable-
ÐнаÑение
true, еÑли ÑÑо ÑвойÑÑво доÑÑÑпно пÑи пеÑеÑиÑлении ÑвойÑÑв ÑодеÑжаÑего его обÑекÑа, инаÑе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, еÑли пеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¼ÐµÑода не ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом (ÑвлÑеÑÑÑ Ð¿ÑимиÑивнÑм знаÑением), бÑÐ´ÐµÑ Ð²ÑбÑоÑено иÑклÑÑение 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
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.getownpropertydescriptor> |