Вернуться к уроку

Странное поведение instanceof

важность: 5

Почему instanceof в коде ниже возвращает true, ведь объект a явно создан не B()?

function A() {}

function B() {}

A.prototype = B.prototype = {};

var a = new A();

alert( a instanceof B ); // true

Да, это выглядит достаточно странно, поскольку объект a не создавался функцией B.

Но методу instanceof на самом деле вообще не важна функция. Он смотрит на её prototype и сверяет его с цепочкой __proto__ объекта.

В данном случае a.__proto__ == B.prototype, поэтому instanceof возвращает true.

По логике instanceof именно прототип задаёт «тип объекта», поэтому instanceof работает именно так.