назад до уроку

Дивний instanceof

важливість: 5

Чому instanceof повертає true у коді нижче? Ми можемо легко побачити, що a не створюється B().

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

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

Так, виглядає справді дивно.

Але instanceof нема діла до функції, все залежить від її властивості prototype, значення якої порівнюється з ланцюжком прототипів.

І тут a.__proto__ == B.prototype, тому instanceof повертає true.

Отже, за логікою instanceof, властивість prototype насправді визначає тип, а не сама функція-конструктор.