instnaceof غريب
في الشيفرة أسفله، لماذا يُعيد instanceof
القيمة true
. يتّضح جليًا بأنّ B()
لم يُنشِئ a
.
function A() {}
function B() {}
A.prototype = B.prototype = {};
let a = new A();
alert( a instanceof B ); // true
أجل، غريب عجيب حقًا.
ولكن كما نعرف فلا يكترث المُعامل instanceof
بالدالة، بل بكائن prototype لها حيث تُطابقه مع غيره في سلسلة prototype.
وهنا نجد a.__proto__ == B.prototype
، بذلك يُعيد instanceof
القيمة true
.
إذًا فحسب منطق instanceof
، كائن prototype
هو الذي يُعرّف النوع وليس الدالة البانية.