Джаваскрипт мова прототипна, можна прив'язати все до всього) Тому і варіантів успадкування безліч!
Позичаємо метод у 1-го об'єкта 2-му:
const obj1 = { name: 'Vasia', age: 12, getName() { return this.name; } }; const obj2 = { name: 'Petia', age: 14 }; obj2.getName = obj1.getName;
Створити пустий об'єкт і помістити в нього дані з іншого об'єкта (і властивості, і методи):
const obj3 = {}; obj3.__proto__ = obj1;
Створити новий об'єкт на базі іншого:
const obj4 = Object.create(obj1);
Створити функцію-конструктор, потім додати 2 методи і на її базі стоврити дочірню функцію-конструктор з такими ж методами:
function Parent(name, age) { this.name = name; this.age = age; this.color = 'red'; } Parent.prototype.getName = function () { return this.name; } Parent.prototype.getAge = function () { return this.age; } function Child(name, age, address) { Parent.call(this, name, age); this.address = address; this.color = 'blue'; } Child.prototype = Parent.prototype;
А це вже найвищий рівень задротства))) Успадкування методів та властивостей за допомогою створення екземпляра об'єкта і вже з нього створення нової функції:
function Grandson(){ this.color = 'yellow'; } const grandson = new Grandson(); // екземпляр Grandson.prototype = child; // успадковуємо методи і властивості за допомогою екземпляру об'єкта const oldson = new Grandson('Онук', 8, 'Львів'); // екземпляр нового об'єкта
Сучасний варіант успадковування, за допомогою ключового слова extends:
class A{ constructor(name, age, city){ this.name = name; this.age = age; this.city = city; } getName(){ return this.name; } getAge(){ return this.age; } getCity(){ return this.city; } }
У джаваскрипт class це не є оремий тип, це та сама функція-конструктор!
class B extends A{ constructor(name, age, city, education){ super(name, age, city); this.education = education; } getEducation(){ return this.education; } }
Успадкування за допомогою деструктуризації (розбиваємо об'єкт на змінні та функції та збираємо новий об'єкт):
const {name, age, getName} = obj1; // створюємо змінні з даними від об'єкта obj1 const objDestruct = {name, age, getName}; // новий об'єкт з даними obj1