Object.setPrototypeOf()
الدالة Object.setPrototypeOf()
تضبط كائن prototype (أي الخاصية [[Prototype]]
الداخلية) للكائن المُحدَّد إلى كائنٍ آخر أو إلى القيمة null
.
تحذير: تغيير خاصية [[Prototype]]
لأحد الكائنات هي عمليةٌ بطيئةٌ جدًا بسبب طبيعة تحسين محركات JavaScript الأداء للوصول إلى الخاصيات، وهي بطيئةٌ في جميع المتصفحات ومحركات JavaScript، وتأثيرها على الأداء بسبب تعديل طريقة وراثة الكائنات كبيرٌ وذو مدى بعيد، وليس مقتصرًا على الوقت اللازم لتنفيذ الدالة Object.setPrototypeOf()
فقط، لكنه سيمتد لأيّة شيفرات ستصل إلى أيّة كائنات تغيّرت فيها قيمة الخاصية [[Prototype]]
؛ لذا إذا كنتَ مهتمًا بالأداء فتجنب تعديل هذه الخاصية، وذلك بإنشاء كائن جديد له كائن [[Prototype]]
الذي تريده باستخدام الدالة Object.create()
.
البنية العامة
Object.setPrototypeOf(obj, prototype);
obj
الكائن الذي نريد ضبط قيمة الخاصية prototype فيه.
prototype
قيمة كائن prototype الجديدة (كائن أو null
).
القيمة المعادة
الكائن المعطي.
الوصف
سترمي هذه الدالة الخطأ TypeError
إذا كانت الخاصية [[Prototype]]
التي سنُعدِّلها غير قابلة للتوسعة اعتمادًا على ناتج الدالة Object.isExtensible()
.
لن تفعل هذه الدالة شيئًا إذا كان الوسيط prototype
المُمرَّر إليها ليس كائنًا أو null
(أي عدد أو سلسلة نصية أو قيمة منطقية أو undefined
)؛ وعدا ذلك ستُعدِّل هذه الدالة الخاصية [[Prototype]]
للكائن obj
إلى القيمة الجديدة.
الدالة Object.setPrototypeOf()
موجودة في معيار ECMAScript 2015، وهي تُعدّ الطريقة الصحيحة لضبط كائن prototype لأحد الكائنات، مقارنةً مع الخاصية Object.prototype.__proto__
المثيرة للجدل.
أمثلة
مثال عن إنشاء كائن جديد له القيمة null
للخاصية prototype:
var dict = Object.setPrototypeOf({}, null);
تعويض نقص دعم المتصفحات
باستخدام الخاصية القديمة Object.prototype.__proto__
، يمكننا بسهولة تعريف الدالة Object.setPrototypeOf()
إن لم تكن متاحةً؛ لاحظ أنَّ الشيفرة الآتية تعمل في متصفحَي Chrome و Firefox لكن ليس في IE:
Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {
obj.__proto__ = proto;
return obj;
}
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | 34 | 31 | 11 | نعم | 9 |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).