Object.getOwnPropertyDescriptors()
الدالة Object.getOwnPropertyDescriptors()
تُعيد واصفات جميع الخاصيات التابعة لكائنٍ ما مباشرةً (أي أنها معرَّفة في الكائن نفسه، وليس في سلسلة prototype).
البنية العامة
Object.getOwnPropertyDescriptors(obj)
obj
الكائن الذي نريد الحصول على واصفات جميع خاصياته.
القيمة المعادة
كائن يحتوي على واصفات جميع الخاصيات التابعة للكائن، وقد يكون هذا الكائن فارغًا لم لم يملك الكائن المعني أيّة خاصيات.
الوصف
تسمح لنا هذه الدالة بالحصول على الوصف الدقيق لجميع خاصيات الكائن؛ وتتألف الخاصيات في JavaScript من سلسلة نصية تُشكِّل اسم الخاصية وواصف لتلك الخاصية؛ لمزيدٍ من المعلومات حول أنواع واصفات الخاصيات والمفاتيح التي يمكن ضبطها عليها فيمكن الرجوع إلى صفحة الدالة Object.defineProperty()
.
لدى واصفات الخاصيات المفاتيح الآتية:
configurable
: إذا كانت قيمة هذا المفتاح هيtrue
فيمكن تعديل واصف الخاصية (وليس قيمة الخاصية) ويمكن حذف الخاصية من الكائن. القيمة الافتراضية هيfalse
.enumerable
: إذا كانت قيمة هذا المفتاح هيtrue
فستظهر هذه الخاصية عند إحصاء خاصيات (enumeration) الكائن. القيمة الافتراضية هيfalse
.
value
: تحديد القيمة المرتبطة مع الخاصية، ويمكن أن تكون أيّ قيمة مسموحة في JavaScript (مثل الأعداد أو الدوال أو الكائنات ...إلخ.). القيمة الافتراضية هيundefined
. هذا المفتاح موجودٌ في واصفات البيانات (data descriptors) فقط.writable
: إذا كانت قيمة هذا المفتاح هيtrue
فسيمكن تعديل القيمة المرتبطة بهذا الخاصية باستخدام معاملات الإسناد. القيمة الافتراضية هيfalse
. هذا المفتاح موجودٌ في واصفات البيانات (data descriptors) فقط.
get
: الدالة التي ستُعدّ كدالة getter لهذا الخاصية، أو القيمةundefined
إذا لم تكن هنالك دالة getter مرتبطة مع هذه الخاصية؛ القيمة التي ستُعيدها هذه الدالة ستُستخدَم كقيمة للخاصية. القيمة الافتراضية هيundefined
. هذا المفتاح موجودٌ في واصفات الوصول (accessor descriptors) فقط.set
: الدالة التي ستُعدّ كدالة setter لهذا الخاصية، أو القيمةundefined
إذا لم تكن هنالك دالة setter مرتبطة مع هذه الخاصية؛ تقبل هذه الدالة وسيطًا واحدًا هو القيمة الجديدة التي حاول المستخدم إسنادها إلى هذه الخاصية. القيمة الافتراضية هيundefined
. هذا المفتاح موجودٌ في واصفات الوصول (accessor descriptors) فقط.
أمثلة
إنشاء نسخ من أحد الكائنات
في حين أنَّ الدالة Object.assign()
تنسخ الخاصيات التي يملكها الكائن والقابلة للإحصاء (enumerable) من الكائن المصدري إلى الكائن الهدف، يمكن أن نستخدم هذه الدالة إضافةً إلى الدالة Object.assign()
لإنشاء نسخة سطحية (shallow copy) من أحد الكائنات:
Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
);
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | 54 | 50 | غير مدعومة | 41 | 10 |
على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2017.