07-09-24 12:03:35
Существует несколько причин, по которым может потребоваться расширить встроенные классы:
Чтобы расширить встроенный класс, используется ключевое слово extends. Это позволяет дочернему классу наследовать все методы и свойства родительского класса.
class CustomArray extends Array {
// Новый метод для CustomArray
average() {
if (this.length === 0) return 0;
const sum = this.reduce((acc, val) => acc + val, 0);
return sum / this.length;
}
}
const arr = new CustomArray(10, 20, 30, 40);
console.log(arr.average()); // Вывод: 25
console.log(arr instanceof CustomArray); // Вывод: true
console.log(arr instanceof Array); // Вывод: true
В этом примере CustomArray расширяет встроенный класс Array и добавляет новый метод average(). Этот метод вычисляет среднее значение элементов массива. Новый CustomArray по-прежнему имеет доступ ко всем методам класса Array, таким как reduce(), push() и pop().
Другой распространённый случай — расширение встроенного класса Error для создания пользовательских типов ошибок. Это полезно, когда вам требуется специализированная обработка ошибок, например, создание определённых типов ошибок для разных частей приложения.
class ValidationError extends Error {
constructor(message) {
super(message); // Вызов конструктора родительского класса
this.name = 'ValidationError'; // Установка имени ошибки
}
}
try {
throw new ValidationError('Некорректный ввод!');
} catch (e) {
console.log(e.name); // Вывод: ValidationError
console.log(e.message); // Вывод: Некорректный ввод!
console.log(e instanceof ValidationError); // Вывод: true
console.log(e instanceof Error); // Вывод: true
}
Здесь ValidationError расширяет встроенный класс Error. Наследуя Error, мы сохраняем всю функциональность встроенной обработки ошибок в JavaScript, создавая при этом более специфичный тип ошибки, который можно перехватывать и обрабатывать уникальным образом.