Да, это выглядит достаточно странно, поскольку объект `a` не создавался функцией `B`. Но методу `instanceof` на самом деле вообще не важна функция. Он смотрит на её `prototype` и сверяет его с цепочкой `__proto__` объекта. В данном случае `a.__proto__ == B.prototype`, поэтому `instanceof` возвращает `true`. По логике `instanceof` именно прототип задаёт "тип объекта", поэтому `instanceof` работает именно так.