يُتيح لنا المُعامل instanceof (أهو سيرورة من) فحص هل الكائن ينتمي إلى الصنف الفلاني؟ كما يأخذ الوراثة في الحسبان عند الفحص.
Such a check may be necessary in many cases. For example, it can be used for building a polymorphic function, the one that treats arguments differently depending on their type.
معامل instanceof
صياغته هي:
obj instanceof Class;
يُعيد المُعامل قيمة true لو كان الكائن obj ينتمي إلى الصنف Class أو أيّ صنف يرثه.
مثال:
class Rabbit {}
let rabbit = new Rabbit();
// هل هو كائن من الصنف Rabbit؟
alert( rabbit instanceof Rabbit ); // نعم
كما يعمل مع الدوال البانية:
// بدل استعمال class
function Rabbit() {}
alert( new Rabbit() instanceof Rabbit ); // نعم
…كما والأصناف المضمّنة مثل المصفوفات Array:
let arr = [1, 2, 3];
alert(arr instanceof Array); // نعم
alert(arr instanceof Object); // نعم
لاحظ كيف أنّ الكائن arr ينتمي إلى صنف الكائنات Object أيضًا، إذ ترث المصفوفات -عبر prototype- الكائناتَ.
عادةً ما يتحقّق المُعامل instanceof من سلسلة prototype عند الفحص. كما يمكننا وضع المنطق الذي نريد لكلّ صنف في التابِع الثابت Symbol.hasInstance