--- title: extends slug: Web/JavaScript/Reference/Classes/extends tags: - Классы - Наследование - Расширение translation_of: Web/JavaScript/Reference/Classes/extends ---
Ключевое слово extends используется в объявлении класса или в выражениях класса для создания дочернего класса.
class ChildClass extends ParentClass { ... }
Ключевое слово extends может быть использовано для создания дочернего класса для уже существующего класса или встроенного объекта.
Свойство .prototype родительского класса или объекта должно быть {{jsxref("Object")}} или {{jsxref("null")}}.
extendsВ первом примере создаётся дочерний класс с именем Square от класса с именем Polygon. Этот пример был взят из live demo (source).
class Square extends Polygon {
constructor(length) {
// Здесь вызывается конструктор родительского класса,
// в который передаётся свойство length в качестве
// аргументов, соответствующих полям width и height,
// класса Polygon
super(length, length);
// Примечание:
// В конструкторе класса, метод super() должен быть вызван
// перед использованием this. В противном случае, будет
// выброшена ошибка.
this.name = 'Square';
}
get area() {
return this.height * this.width;
}
}
extendsЭтот пример расширяет встроенный объект {{jsxref("Date")}}. Пример взят из live demo (source).
class myDate extends Date {
constructor() {
super();
}
getFormattedDate() {
var months = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];
return this.getDate() + '-' +
months[this.getMonth()] + '-' +
this.getFullYear();
}
}
nullРасширение {{jsxref("null")}} работает как и с обычным классом, за исключением того, что прототип объекта не наследует {{jsxref("Object.prototype")}}.
class nullExtends extends null {
constructor() {}
}
Object.getPrototypeOf(nullExtends); // Function.prototype
Object.getPrototypeOf(nullExtends.prototype) // null
new nullExtends(); //ReferenceError: this is not defined
{{Compat}}