Вы занимаете метод Object.prototypeот Functionвыяснить , если значение , которое вы передаете в любой из функций является экземпляром Functionконструктора или Arrayконструктор.
Использование toStringнепосредственно из прототипа объекта переопределит toStringна Array.prototype и Function.prototype, которые имеют разные типы поведения.
function b(a) {
return "[object Function]" == Object.prototype.toString.call(a)
}
console.log(
Object.prototype.toString.call(b),
b(b)
)