zpět k lekci

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.