Object.getOwnPropertyDescriptors()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since апÑÐµÐ»Ñ 2017 г..
ÐеÑод Object.getOwnPropertyDescriptors() возвÑаÑÐ°ÐµÑ Ð²Ñе ÑобÑÑвеннÑе деÑкÑипÑоÑÑ ÑвойÑÑв данного обÑекÑа.
ÐнÑеÑакÑивнÑй пÑимеÑ
const object1 = {
property1: 42,
};
const descriptors1 = Object.getOwnPropertyDescriptors(object1);
console.log(descriptors1.property1.writable);
// Expected output: true
console.log(descriptors1.property1.value);
// Expected output: 42
СинÑакÑиÑ
Object.getOwnPropertyDescriptors(obj)
ÐаÑамеÑÑÑ
obj-
ÐбÑекÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑого нÑжно полÑÑиÑÑ Ð²Ñе ÑобÑÑвеннÑе деÑкÑипÑоÑÑ ÑвойÑÑв.
ÐозвÑаÑаемое знаÑение
ÐбÑекÑ, ÑодеÑжаÑий вÑе ÑобÑÑвеннÑе деÑкÑипÑоÑÑ ÑвойÑÑв обÑекÑа. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑой обÑекÑ, еÑли Ð½ÐµÑ ÑвойÑÑв.
ÐпиÑание
ÐÑÐ¾Ñ Ð¼ÐµÑод позволÑÐµÑ Ð¸Ð·ÑÑиÑÑ ÑоÑное опиÑание вÑеÑ
ÑобÑÑвеннÑÑ
ÑвойÑÑв обÑекÑа. СвойÑÑво в JavaScript ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· ÑÑÑокового имени или Symbol и ÑвойÑÑва деÑкÑипÑоÑа. ÐополниÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑипаÑ
ÑвойÑÑв деÑкÑипÑоÑов и иÑ
аÑÑибÑÑаÑ
можно найÑи в Object.defineProperty().
СвойÑÑво деÑкÑипÑоÑа ÑÑо запиÑÑ Ñ Ð½ÐµÐºÐ¾ÑоÑÑми из ÑледÑÑÑÐ¸Ñ Ð°ÑÑибÑÑов:
value-
ÐнаÑение, ÑвÑзанное Ñо ÑвойÑÑвом (ÑолÑко деÑкÑипÑоÑÑ Ð´Ð°Ð½Ð½ÑÑ ).
writable-
trueÑогда и ÑолÑко Ñогда когда знаÑение, ÑвÑзанное Ñо ÑвойÑÑвом, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾ (ÑолÑко деÑкÑипÑоÑÑ Ð´Ð°Ð½Ð½ÑÑ ). get-
ФÑнкÑиÑ, коÑоÑÐ°Ñ ÑлÑÐ¶Ð¸Ñ Ð² каÑеÑÑве полÑÑаÑÐµÐ»Ñ Ð´Ð»Ñ ÑвойÑÑва, или
undefinedеÑли Ð½ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÐµÐ»Ñ (ÑолÑко деÑкÑипÑоÑÑ Ð´Ð¾ÑÑÑпа). set-
ФÑнкÑиÑ, коÑоÑÐ°Ñ ÑлÑÐ¶Ð¸Ñ ÑÑÑановÑиком Ð´Ð»Ñ ÑвойÑÑва, или
undefinedеÑли ÑÑÑановÑика Ð½ÐµÑ (ÑолÑко деÑкÑипÑоÑÑ Ð´Ð¾ÑÑÑпа). configurable-
trueÑогда и ÑолÑко Ñогда, когда Ñип ÑÑого ÑвойÑÑва деÑкÑипÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñн, и еÑли ÑвойÑÑво Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдалено из ÑооÑвеÑÑÑвÑÑÑего обÑекÑа. enumerable-
trueÑогда и ÑолÑко Ñогда, когда ÑÑо ÑвойÑÑво оÑобÑажаеÑÑÑ Ð¿Ñи пеÑеÑиÑлении ÑвойÑÑв ÑооÑвеÑÑÑвÑÑÑего обÑекÑа.
ÐÑимеÑÑ
>Создание повеÑÑ Ð½Ð¾ÑÑного клона
Ð Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº меÑод Object.assign() бÑÐ´ÐµÑ ÑолÑко копиÑоваÑÑ Ð¿ÐµÑеÑиÑлÑемÑе и ÑобÑÑвеннÑе ÑвойÑÑва из иÑÑ
одного обÑекÑа в Ñелевой обÑекÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¼ÐµÑод и Object.create() Ð´Ð»Ñ Ð¿Ð¾Ð²ÐµÑÑ
ноÑÑного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑнÑми обÑекÑами:
Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj),
);
Создание подклаÑÑа
ТипиÑнÑй ÑпоÑоб ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑа ÑÑо опÑеделиÑÑ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑ, опÑеделиÑÑ ÑвойÑÑва ÑÑого ÑкземплÑÑа. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑдобно оÑобенно Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑаÑелей и ÑÑÑановÑиков. ÐмеÑÑо ÑÑого, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑÐ¾Ñ ÐºÐ¾Ð´ Ð´Ð»Ñ ÑÑÑановки пÑоÑоÑипа:
function superclass() {}
superclass.prototype = {
// ÐпÑеделиÑе ваÑи меÑÐ¾Ð´Ñ Ð¸ ÑвойÑÑва здеÑÑ
};
function subclass() {}
subclass.prototype = Object.create(superclass.prototype, {
// ÐпÑеделиÑе ваÑи меÑÐ¾Ð´Ñ Ð¸ ÑвойÑÑва здеÑÑ
});
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.getownpropertydescriptors> |