المعامل instanceof
في JavaScript
المعامل instanceof
يختبر إذا كانت الخاصية prototype
لدالة بانية تظهر في أيّ مكان في سلسلة prototype لأحد الكائنات.
البنية العامة
object instanceof constructor
object
الكائن الذي نريد معرفة إن كانت خاصية prototype
للدالة البانية constructor
ستظهر في أي مكان في سلسلة prototype الخاصة به.
constructor
الدالة البانية التي سنختبر الكائن بها.
الوصف
يختبر المعامل instanceof
وجود الخاصية constructor.prototype
في سلسلة prototype للكائن object
.
// تعريف الدوال البانية
function C() {}
function D() {}
var o = new C();
// true: Object.getPrototypeOf(o) === C.prototype
o instanceof C;
// false, D.prototype ليست موجودةً في سلسلة prototype
o instanceof D;
o instanceof Object; // true, لأن:
C.prototype instanceof Object // true
C.prototype = {};
var o2 = new C();
o2 instanceof C; // true
// false, لأن C.prototype
// ليست موجودةً في سلسلة prototype
// للكائن o
o instanceof C;
// إضافة الكائن C إلى سلسلة
// prototype للكائن D
D.prototype = new C();
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true, C.prototype موجودة في سلسلة الكائن o3
لاحظ أنَّ قيمة الاختبار instanceof
قد تختلف اعتمادًا على خاصية prototype
للدوال البانية، ويمكن تغييرها بتغيير سلسلة prototype للكائن عبر الدالة Object.setPrototypeOf()
.
أمثلة
الكائنان String
و Date
نوعهما هو Object
الشيفرة الآتية تستخدم المعامل instanceof
لتوضيح أنَّ الكائنين String
و Date
مشتقان من الكائن Object
.
لكن الكائنات المُنشَأة بالشكل المختصر هي استثناءٌ هنا، لأنَّ سلسلة prototype لها غير مُعرَّفة، لكنه التعبير instanceof Object
سيعيد true
.
var simpleStr = 'This is a simple string';
var myString = new String();
var newStr = new String('String created with constructor');
var myDate = new Date();
var myObj = {};
simpleStr instanceof String; // false, لأن سلسلة prototype قيمتها هي undefined
myString instanceof String; // true
newStr instanceof String; // true
myString instanceof Object; // true
myObj instanceof Object; // true, على الرغم من أنَّ قيمة الخاصية prototype هو undefined
({}) instanceof Object; // true, كما في الحالة السابقة
myString instanceof Date; // false
myDate instanceof Date; // true
myDate instanceof Object; // true
myDate instanceof String; // false
استخدام المعامل instanceof
على كائن خاص
سنُنشِئ في المثال الآتي كائنًا نوعه هو Car
وسنُنشِئ نسخةً منه باسم mycar
، وسيوضِّح المعامل instanceof
أنَّ الكائن mycar
من النوع Car
و Object
:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
var mycar = new Car('Honda', 'Accord', 1998);
var a = mycar instanceof Car; // true
var b = mycar instanceof Object; // true
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 3rd Edition.