Как проверить, является ли объект экземпляром определенного класса (функции-конструктора)?
Этот вопрос проверяет знание разработчика о том, как в JavaScript можно определить, был ли объект создан с помощью определенного конструктора или является потомком другого объекта через цепочку прототипов.
Короткий ответ
Для проверки, является ли объект экземпляром определенного класса или функции-конструктора, используется оператор instanceof. Он проверяет, есть ли в цепочке прототипов объекта ссылка на прототип конструктора.
Длинный ответ
Оператор instanceof в JavaScript позволяет проверить, был ли объект создан с помощью определенной функции-конструктора или унаследовал от нее через прототипы. Он работает по цепочке прототипов объекта, проверяя, есть ли у него в прототипах ссылка на прототип функции-конструктора.
Пример:
function Animal() {}
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
const myDog = new Dog();
console.log(myDog instanceof Dog); // true
console.log(myDog instanceof Animal); // true
console.log(myDog instanceof Object); // trueЗдесь объект myDog был создан через конструктор Dog, но благодаря наследованию от Animal, он также является экземпляром Animal. Оператор instanceof проходит по цепочке прототипов и проверяет, ссылаются ли они на соответствующий прототип.
Этот оператор полезен для определения типов объектов и работы с ними в зависимости от их происхождения.