Не все функции создаются с помощью конструктора Function
.instanceof
специально проверяет, был ли данный элемент создан с помощью этой конкретной функции .
Вы получаете аналогичный эффект в браузерных средах при работе с несколькими окнами.Я имею в виду, если у вас есть функция foo
в окне A:
function foo(arg) {
if (arg instanceof Array) {
// It's an array, do something
}
}
... и у вас есть код в другом окне B, которое вызывает ее:
opener.foo([]);
... тогда вы ожидаете, что foo
поймет, что arg
- это массив, верно?Но это не так, потому что, хотя arg
является массивом, он не был создан конструктором Array
в окне, в котором находится foo
.
Подробнее овыяснить, что здесь есть: Скажите, что?
Если вы очарованы этим (как вам кажется), нет ничего лучше чтения спецификация .Да, проза ... сухая ... и терминология ... плотная ... но она становится все более и более интересной по мере того, как вы все больше и больше узнаете об основных принципах работы.
Не по теме : помните, что __proto__
не является стандартным и поддерживается не всеми реализациями JavaScript.