الكائن Object
في JavaScript
الدالة البانية Object
تُنشِئ كائنًا.
البنية العامة
// الشكل المختصر لتهيئة الكائن
{ [ nameValuePair1[, nameValuePair2[, ...nameValuePairN] ] ] }
// استدعاء الدالة البانية
new Object([value])
nameValuePairN
أزواج من الأسماء (السلاسل النصية) والقيم (أيّ نوع من القيم) التي يُفصل فيها بين الاسم والقيمة بنقطتين رأسيتين :
.
value
أيّة قيمة في JavaScript.
الوصف
الدالة البانية Object
تُغلِّف (wrap) القيمة المعطية في كائن، وإذا كانت القيمة المعطية null
أو undefined
، فستُنشِئ وتُعيد كائنًا فارغًا، وفيما عدا ذلك فستُنشِئ وتُعيد كائنًا من النوع المناسب للقيمة المعطية، ولو كانت القيمة المعطية هي كائن فستُعاد القيمة نفسها.
إذا استدعيت الدالة Object
دون الكلمة المحجوزة new
(التي تُستخدَم مع الدوال البانية)، فسيكون سلوكها مماثلًا للتعبير new Object()
.
انظر أيضًا إلى تعبير تهيئة الكائنات (object initializer أو literal syntax).
الخاصيات التابعة للدالة البانية Object
Object.length
تملك هذه الخاصية القيمة 1.
Object.prototype
تسمح هذه الخاصية بإضافة خاصيات متاحة لجميع الكائنات التي نوعها هو Object
.
الدوال التابعة للدالة البانية Object
Object.assign()
نسخ قيم جميع الخاصيات القابلة للإحصاء التابعة للكائن من كائنٍ مصدريٍ أو أكثر إلى الكائن الهدف.
Object.create()
إنشاء كائن جديد له كائن prototype معيّن، مع ضبط خاصياته.
Object.defineProperty()
إضافة خاصية مُسماة موصوفة بواصف (descriptor) معيّن إلى الكائن.
Object.defineProperties()
إضافة خاصيات مُسماة موصوفة بواصفات (descriptors) معيّنة إلى الكائن.
Object.entries()
إعادة مصفوفة تحوي على الخاصيات القابلة للإحصاء التابعة لأحد الكائن على شكل الأزواج [key, value]
.
Object.freeze()
تجميد الكائن، أي لن تتمكن بقية الشيفرات من تعديل أو حذف خاصياته.
Object.getOwnPropertyDescriptor()
إعادة واصف الخاصية (property descriptor) للخاصية المسماة في أحد الكائنات.
Object.getOwnPropertyDescriptors()
إعادة واصف الخاصية (property descriptor) لجميع خاصيات أحد الكائنات.
Object.getOwnPropertyNames()
إعادة مصفوفة تحتوي على أسماء جميع الخاصيات التابعة مباشرةً للكائن، سواءً كانت قابلةً للإحصاء أم لم تكن كذلك.
Object.getPrototypeOf()
إعادة خاصية prototype
للكائن المعطي.
Object.is()
معرفة إن كانت قيمتان متساويتين، ويمكن استخدام هذه الدالة لمساواة قيمة NaN
(وهذا يختلف عن استخدام معاملات المقارنة).
Object.isExtensible()
تحديد إن كان بالإمكان توسعة أحد الكائنات.
Object.isFrozen()
تحديد إن كان أحد الكائنات مجمَّدًا.
Object.isSealed()
تحديد إن كان أحد الكائنات مختومًا.
Object.keys()
إعادة مصفوفة تحتوي على أسماء جميع الخاصيات القابلة للإحصاء والتابعة للكائن مباشرةً.
Object.preventExtensions()
منع توسعة الكائن.
Object.seal()
منع بقية شيفرات البرنامج من حذف خاصيات الكائن.
Object.setPrototypeOf()
ضبط كائن prototype (أي خاصية [[Prototype]]
الداخلية).
Object.values()
إعادة مصفوفة من قيم الخاصيات القابلة للإحصاء والتابعة مباشرةً لكائنٍ ما.
الكائن prototype
جميع الكائنات في JavaScript تنحدر من الكائن Object
، وجميع الكائنات ترث الدوال والخاصيات الموجودة في الكائن Object.prototype
، وصحيحٌ أنَّ بالإمكان إعادة الكتابة على ذلك الكائن (مثلًا، الكائنات الأخرى تعيد الكتابة فوق خاصية constructor
وتوفِّر دوال toString()
خاصة بها)، لكن التعديلات على كائن prototype
التابعة للكائن Object
ستكون متاحة لجميع الكائنات ما لم يُعاد تعريف تلك الدوال والخاصيات ضمن سلسلة prototype
.
الخاصيات
Object.prototype.constructor
تحديد ما هي الدالة التي ستُنشِئ الكائن.
Object.prototype.__proto__
الإشارة إلى الكائن prototype التابعة لنسخة الكائن.
Object.prototype.__noSuchMethod__
السماح بتعريف دالة التي ستُنفَّذ عند محاولة استدعاء خاصية غير موجودة في الكائن. هذه الخاصية غير معيارية وغير مدعومة في أغلبية المتصفحات.
Object.prototype.__count__
كانت تستعمل للحصول على عدد الخاصيات القابلة للإحصاء الموجودة في كائن مُعرَّف من قبل المستخدم، لكن هذه الخاصية محذوفة وغير مدعومة في أي متصفح.
Object.prototype.__parent__
كانت تستعمل للإشارة إلى سياق تنفيذ الكائن (object's context)، لكن هذه الخاصية محذوفة وغير مدعومة في أي متصفح.
الدوال
Object.prototype.__defineGetter__()
ربط دالة مع خاصيةٍ ما، وستُنفَّذ تلك الدالة عند محاولة الوصول إلى تلك الخاصية، وستُعاد القيمة المعادة من الدالة.
Object.prototype.__defineSetter__()
ربط دالة مع خاصيةٍ ما، وستُنفَّذ تلك الدالة عند محاولة تعديل تلك الخاصية.
Object.prototype.__lookupGetter__()
إعادة الدالة المرتبطة مع الخاصية المُحدَّدة باستخدام الدالة __defineGetter__().
Object.prototype.__lookupSetter__()
إعادة الدالة المرتبطة مع الخاصية المُحدَّدة باستخدام الدالة __defineSetter__().
Object.prototype.hasOwnProperty()
إعادة قيمة منطقية تُشير إذا كان الكائن يملك الخاصية المُحدَّدة مباشرةً (أي أنَّه لم يرثها من سلسلة prototype).
Object.prototype.isPrototypeOf()
إعادة قيمة منطقية تُشير إذا كان الكائن التي اُستدعيت الدالة عليه موجودٌ في سلسلة prototype للكائن المُحدَّد.
Object.prototype.propertyIsEnumerable()
إعادة قيمة منطقية تُشير إذا كانت الخاصية (attribute) الداخلية [[Enumerable]]
مضبوطةً.
Object.prototype.toSource()
إعادة سلسلة نصية تحتوي على الشيفرة المصدرية التي تُمثِّل الكائن الذي استدعى هذه الدالة، ويمكن استخدام هذه القيمة لإنشاء كائن جديد. هذه الخاصية محذوفة وغير مدعومة في أغلبية المتصفحات.
Object.prototype.toString()
إعادة تمثيل نصيّ للكائن.
Object.prototype.unwatch()
إزالة نقطة مراقبة (watchpoint) من إحدى خاصيات الكائن. هذه الخاصية محذوفة وغير مدعومة في جميع المتصفحات.
Object.prototype.valueOf()
إعادة القيمة الأوليّة للكائن المُحدَّد.
Object.prototype.watch()
إضافة نقطة مراقبة (watchpoint) إلى إحدى خاصيات الكائن. هذه الخاصية محذوفة وغير مدعومة في جميع المتصفحات.
Object.prototype.eval()
تقدير قيمة شيفرة JavaScript في سياق تنفيذ الكائن الحالي. هذه الخاصية محذوفة وغير مدعومة في جميع المتصفحات، ويجب استخدام الدالة eval()
بدلًا منها.
أمثلة
استخدام Object
مع القيمتين undefined
و null
الأمثلة الآتية تؤدي إلى تخزين كائن Object
فارغ في المتغير o
:
var o = new Object();
var o = new Object(undefined);
var o = new Object(null);
استخدام Object
لإنشاء قيم منطقية Boolean
المثالان الآتيان يُخزِّنان قيمًا منطقيةً من النوع Boolean
في المتغير o
:
// تكافئ o = new Boolean(true);
var o = new Object(true);
// تكافئ o = new Boolean(false);
var o = new Object(Boolean());
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
انظر إلى صفحة كل دالة من الدوال التابعة للكائن Object
لتفاصيل عن دعم المتصفحات لها.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .