Ключевое слово extends
используется в объявлении класса или в выражениях класса для создания дочернего класса.
Синтаксис
class ChildClass extends ParentClass { ... }
Описание
Ключевое слово extends
может быть использовано для создания дочернего класса для уже существующего класса или встроенного объекта.
Свойство .prototype
родительского класса или объекта должно быть Object
или 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
Этот пример расширяет встроенный объект 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
Расширение null
работает как и с обычным классом, за исключением того, что прототип объекта не наследует Object.prototype
.
class nullExtends extends null {
constructor() {}
}
Object.getPrototypeOf(nullExtends); // Function.prototype
Object.getPrototypeOf(nullExtends.prototype) // null
new nullExtends(); //ReferenceError: this is not defined
Спецификация
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'extends' в этой спецификации. |
Стандарт | Initial definition. |
ECMAScript Latest Draft (ECMA-262) Определение 'extends' в этой спецификации. |
Черновик |
Совместимость с браузерами
We're converting our compatibility data into a machine-readable JSON format.
This compatibility table still uses the old format,
because we haven't yet converted the data it contains.
Find out how you can help!
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 42.0 | 45 (45) | ? | ? | ? |
Array subclassing | 43.0 | Нет | ? | ? | ? |
Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|
Basic support | Нет | 45.0 (45) | ? | ? | ? | 42.0 |
Array subclassing | Нет | Нет | ? | ? | ? | 43.0 |