Это то, что должны знать все разработчики.
Все мы знаем, что [] instanceof Array
возвращает true
, но почему [] instanceof Object
также возвращает true
?
Друзья, если бы вам задали этот вопрос в интервью, как бы вы на него ответили?
Что такое instanceof?
Давайте посмотрим на объяснение на MDN:
«Оператор instanceof
проверяет, появляется ли свойство прототипа конструктора где-либо в цепочке прототипов объекта. Возвращаемое значение является логическим значением. Его поведение можно настроить с помощью Symbol.hasInstance
».
Итак, почему cat instanceof Cat
возвращает true
? Это очень просто, и будет легче понять, если мы нарисуем картинку.
Поскольку Cat.prototype
появляется в цепочке прототипов cat
, правильно вернуть true
.
Рассмотрим более сложный пример:
Из этого рисунка мы можем ясно объяснить, почему все три выражения возвращают true
, потому что Cat.prototype
, Animal.prototype
, Object.prototype
появляются в прототипе cat
, поэтому результат равен true
.
cat instanceof Cat
cat instanceof Animal
at instanceof Object
Почему «[] instanceof Object» возвращает true
Давайте вернемся к самому вопросу и вместе нарисуем простую картинку, чтобы увидеть ответ.
Как реализовать оператор instanceof?
После приведенного выше объяснения, когда интервьюер спрашивает нас, как реализовать instanceof
, достаточно освоить эти знания.
- Прототип функции-конструктора
- Цепочка прототипов объекта
Решение 1
Решение 2
Решение 3
Окончательно
Спасибо, что прочитали. Я с нетерпением ждувашей подписки и новых качественных статей.
Интервьюер: Что случилось с «npm run xxx?
Секрет, о котором не знает большинство людей.javascript.plainenglish.io»
Интервьюер: Может ли «x !== x возвращать True в JavaScript?
Пять волшебных знаний в области JavaScript, о которых вы, возможно, не знали!javascript.plainenglish.io»
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord . Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.