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.