--- title: extends slug: Web/JavaScript/Reference/Classes/extends tags: - ECMAScript 2015 - JavaScript - Класи translation_of: Web/JavaScript/Reference/Classes/extends ---
Ключове слово extends
використовується у оголошеннях класів або у виразах класів для створення дочірнього класу від іншого класу.
class ChildClass extends ParentClass { ... }
Ключове слово extends
може використовуватись для створення підкласів з користувацьких класів, як і з вбудованих об'єктів.
Значенням .prototype
батьківського класу має бути {{jsxref("Object")}} або {{jsxref("null")}}.
extends
Перший приклад створює клас на ім'я Square
(квадрат) з класу на ім'я Polygon
(багатокутник). Даний приклад взятий з цього зразка (джерело).
class Square extends Polygon { constructor(length) { // Тут він викликає конструктор батьківського класу // та надає значення ширини й довжини багатокутника super(length, length); // Заувага: У похідному класі super() має викликатися до // використання 'this'. Інакше виникне помилка посилання. this.name = 'Square'; } get area() { return this.height * this.width; } }
extends
із вбудованими об'єктамиЦей приклад розширює вбудований об'єкт {{jsxref("Date")}}. Даний приклад взяти з цього зразка (джерело).
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
Специфікація | Статус | Коментар |
---|---|---|
{{SpecName('ES2015', '#sec-class-definitions', 'extends')}} | {{Spec2('ES2015')}} | Початкове визначення. |
{{SpecName('ESDraft', '#sec-class-definitions', 'extends')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.classes.extends")}}