Странный 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
в действительности определяет тип, а не функция-конструктор.