Если кто не знает, есть такая проблема в функции instanceof, напомню:
instanceof
Официальный пример:
function Car() {
}
function NoCar() {
}
var mycar = new Car();
console.log(mycar instanceof Car); // returns true
console.log(mycar instanceof NoCar); // returns false
И он как известно работает только если вы не используете свои прототипы, то есть:
var myproto = {};
function Car() {
}
Car.prototype = myproto;
function NoCar() {
}
NoCar.prototype = myproto;
var mycar = new Car();
console.log(mycar instanceof Car); // returns true
console.log(mycar instanceof NoCar); // returns true!
Фактически, это специально сделанная засада и пример официальной документации некорректен. Для объектов без своих прототипов предусмотрен костыль изменяющий поведение instanceof, для случаев с прототипом костыля нет. В общем случае этот пример не работает.
А теперь сам вопрос, почему же этот известный баг столько лет висит в документации и даже никак не обозначен как некорректный или неверно понимаемый, вводящий в заблуждение неокрепшие умы? Или разработчики мозиллы сами его не понимают?
Update: вижу что вопрос был совершенно не понят. Попробую уточнить его для тех кто не понимает вопроса. Выражение if (объект instanceof конструктор) проверяет не то что ожидает рядовой пользователь, то есть проверку соответствия объекта и функции конструктора. Это порождает ошибки в коде и документации, вопросы. И вопрос был почему же несмотря на такой фидбек (гуглите instanceof) в документации это не отражено, но самое главное почему в ней стоит неверный пример (не работающий в общем случае) и почему на это никто не обращает внимание.
Спасибо, но не надо объяснять мне как работает instanceof, доказывать что оно работает так как оно работает, предлагать внести правки в документацию мозиллы. У меня был вопрос почему так происходит, почему явные несоответствия (явные не для меня, гуглите) многие люди старательно обходят стороной. Вариант ответа "оно как-то само так" тоже вариант, но возможно в этом конкретном случае есть какие-то объективные причины которых я не знаю. Этот вопрос тоже был по своему показателен конечно, но я не отказался бы от четкого анализа или пояснения.