torna alle lezioni

Uno strano instanceof

importanza: 5

Nel codice sottostante, perché instanceof ritorna true? Possiamo facilmente vedere che a non è creato da B().

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

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

Sì, sembra strano.

Ma instanceof non prende in considerazione la funzione, ma piuttosto il suo prototype, che trova riscontro nella catena dei prototye.

In questo caso a.__proto__ == B.prototype, quindi instanceof ritorna true.

Quindi, secondo la logica di instanceof, è il prototype a definire il tipo, non il costruttore.