extends

extends - наслідування класу.

Синтаксис:

class nameClass extends nameExtends{ ... }

Параметри:

class - ключове слово class яке оголошує клас.

nameClass - назва оголошеного класу.

nameExtends - назва класу, об'єкта яке буде наслідуване.

Опис:

extends вказує на батькіаський клас, об'єкт від якого буде наслідувано властивості, методи.

Батьківський клас повинен бути оголошений першим. Інакше виникне помилка: "ReferenceError: Cannot access 'A' before initialization".

При наслідувані класу у JavaScript дозволено викортстовувати назву методів яка уже є в батьківському класі (однакові імена методів). При цьому щоб викликати батьківський метод необхідно звернутися через super.назва_метода.

extends входить у специфікацію ES2015.

Приклад:

class A{ constructor(text){ this.text=text; } } class B extends A{ toText(){ return this.text; } } var ob=new B("test"); alert( ob.toText() ); Приклад наслідування об'єкта Array: class Arr extends Array{ toText(){ return '['+this+']'; } } var mas=new Arr(12,56); alert( mas.toText() ); class myArray extends Array{ toJSON(){ return JSON.stringify( Array.from(this) ); } } var mas = new myArray(1, 2, 3, "чотири", [2,2]); alert( mas.toJSON() ); Приклад наслідування класу у JavaScript: //базовий клас Людина class Person{ constructor(name, age, masa, weight){ this.name=name; this.age=age; this.masa=masa; this.weight=weight; } toString(){ return this.name; } getIMT(){ return this.masa/Math.pow(this.weight,2); } } //клас Чоловік який наслідується з класу Людина class Man extends Person{ constructor(name, age, masa, weight){ super(name, age, masa, weight); this.work=''; this.marital_status=''; } toString(){ return 'Man: '+this.name; } } //клас Жінка який наслідується з класу Людина class Woman extends Person{ constructor(name, age, masa, weight){ super(name, age, masa, weight); this.work=''; this.marital_status=''; } toString(){ return 'Woman: '+this.name; } } //клас Дитина який наслідується з класу Людина class Child extends Person{ constructor(name, age, masa, weight){ super(name, age, masa, weight); this.school=''; } toString(){ return 'Child: '+this.name; } } var m=new Man('Oleh', 22, 52, 172); var w=new Woman('Oksana', 22, 48, 170); var c=new Child('Olja', 11, 32, 132); c.school='ЗСШ 45'; alert( c );