Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Друзья, если бы вам задали этот вопрос на собеседовании, как бы вы на него ответили?
Давайте посмотрим на объяснение на MDN :
"Оператор instanceof проверяет, появляется ли свойство prototype конструктора где-либо в цепочке прототипов объекта. Возвращаемое значение - булево значение. Его поведение может быть настроено с помощью Symbol.hasInstance".
// from mdn const Cat = function (name) { this.name = name } Cat.prototype.showName = function () { console.info(this.name) } const cat = new Cat('miao') console.info(cat instanceof Cat) // true
Итак, почему cat instanceof Cat возвращает true? Все очень просто, и будет легче понять, если мы нарисуем картинку.
Поскольку Cat.prototype появляется в цепочке прототипов кошки, правильно будет вернуть true.
Давайте рассмотрим более сложный пример:
const Animal = function (name) { this.name = name } Animal.prototype.showName = function () { console.info(this.name) } const Cat = function (name) { Animal.call(this, name) } Cat.prototype = new Animal() Cat.prototype.constructor = Cat const cat = new Cat('miao') console.info(cat instanceof Cat) // true console.info(cat instanceof Animal) // true console.info(cat instanceof Object) // true
Из этого рисунка мы можем четко объяснить, почему все три выражения возвращают true, потому что Cat.prototype, Animal.prototype, Object.prototype все появляются в прототипе кошки, поэтому результат будет true.
Давайте вернемся к самому вопросу и вместе нарисуем простую картинку, чтобы увидеть ответ.
const arr = [] console.info(arr instanceof Array) // true console.info(arr instanceof Object) // true
После вышеприведенного объяснения, когда интервьюер спросит нас, как реализовать оператор instanceof, достаточно освоить эти пункты знаний.
Спасибо за чтение. Я с нетерпением жду, что вы будете следить за мной и читать больше качественных статей.
Подпишитесь на нашу бесплатную еженедельную рассылку . Следите за нами в Twitter , LinkedIn , YouTube , и Discord .
Заинтересованы в масштабировании своего программного стартапа? Посмотрите Circuit.
20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.