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 هذه الميزة.

مصادر ومواصفات