Рассмотрите приведённый код на JavaScript. Что будет выведено в консоль после его выполнения?
Подробное объяснение
Код демонстрирует создание пользовательского класса ошибки CustomError, который наследуется от встроенного класса Error. В функции throwError создаётся экземпляр CustomError с сообщением 'Что-то пошло не так' и кодом 404, который затем выбрасывается. В блоке catch переменная e содержит этот экземпляр, поэтому e instanceof Error возвращает true, так как CustomError является наследником Error. Затем вызывается метод showError(), определённый в классе CustomError, который формирует строку 'Ошибка [404]: Что-то пошло не так', используя свойства code и message объекта ошибки.
Часто задаваемые вопросы (FAQ)
1
Что такое наследование в JavaScript и как оно работает с классами?
Наследование в JavaScript позволяет одному классу (дочернему) унаследовать свойства и методы другого класса (родительского). В данном примере CustomError наследует от Error с помощью ключевого слова extends, что позволяет использовать все возможности Error, включая стек вызовов, и добавлять собственные поля и методы.
2
Как правильно создавать пользовательские ошибки в JavaScript?
Для создания пользовательских ошибок рекомендуется наследовать от встроенного класса Error, как показано в примере. Это обеспечивает корректную работу с оператором instanceof и доступ к стандартным свойствам ошибок, таким как message и stack. Дополнительные поля, например code, можно добавить в конструкторе.
3
Что делает оператор instanceof в JavaScript?
Оператор instanceof проверяет, является ли объект экземпляром определённого класса или его наследника. В коде e instanceof Error возвращает true, потому что e — экземпляр CustomError, который наследует от Error, что подтверждает цепочку прототипов.
Типичные ошибки
1
Попытка вызвать showError() без проверки типа ошибки
Если в блоке catch может быть перехвачена ошибка другого типа, не имеющая метода showError(), это приведёт к ошибке выполнения. Рекомендуется проверять тип ошибки с помощью instanceof перед вызовом специфичных методов.
2
Неверное использование super() в конструкторе пользовательской ошибки
В конструкторе CustomError необходимо вызвать super(message) для корректной инициализации родительского класса Error. Пропуск этого вызова или передача неверных аргументов может привести к некорректному установлению свойства message и другим проблемам.
3
Путаница между свойствами code и message в пользовательской ошибке
Свойство message наследуется от Error и устанавливается через super(message), а code — это пользовательское поле, добавленное в конструкторе CustomError. Использование this.message вместо super(message) или неправильный доступ к этим свойствам может вызвать ошибки в выводе данных.