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.