Podivné instanceof
důležitost: 5
Proč v následujícím kódu instanceof vrací true? Vidíme přece, že a není vytvořeno pomocí B().
function A() {}
function B() {}
A.prototype = B.prototype = {};
let a = new A();
alert( a instanceof B ); // true
Ano, určitě to vypadá podivně.
Ale instanceof se nezajímá o funkci, nýbrž jen o její prototype, který porovnává s prototypovým řetězcem.
A zde je a.__proto__ == B.prototype, takže instanceof vrátí true.
Podle logiky instanceof je tedy typ ve skutečnosti definován vlastností prototype, ne samotným konstruktorem.