retour au cours

instanceof étrange

importance: 5

Dans le code ci-dessous, pourquoi instanceof renvoie true ? Nous pouvons facilement voir que a n’est pas créé par B().

function A() {}
function B() {}

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

Ouais, ça a l’air étrange.

Mais instanceof ne se soucie pas de la fonction, mais plutôt de son prototype, qui correspond à la chaîne de prototypes.

Et ici a.__ proto__ == B.prototype, ainsi instanceof renvoie true.

Ainsi, par la logique de instanceof, le prototype définit en fait le type, pas la fonction constructeur.