Дивний 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
насправді визначає тип, а не сама функція-конструктор.