Page 102 - 6108
P. 102
властивість об'єкта, в тому числі і в плані "затінення властивостей" (property
shadowing), як показано в прикладі вище (в даному конкретному випадку це
форма перевизначення методу – method overriding).
В області видимості успадкованої функції посилання this вказує на
успадкований об'єкт (на спадкоємця), а не на прототип, в якому дана функція є
власною властивістю.
obj.f = function() {return this.a;}
let obj1 = Object.create(obj);
obj1.a = 8;
obj1.f(); //8
obj.f(); //1
Створення наслідування
function Person(name, surname, age) {
this.name = name;
this.surname= surname;
this.age =age;
}
Person.prototype.toString = function() {
return `${this.name} ${this.surname} is ${this.age} years
old.`
};
function User(name, surname, age, nickname) {
Person.call(this, name, surname, age);
this.nickname = nickname;
}
User.prototype = Object.create(Person.prototype);
Object.setPrototypeOf(User.prototype, Person.prototype);
Тут на початку визначається конструктор Person і до його прототипу
додається властивість toString. Потім визначається тип User. У конструкторі
User відбувається звернення до конструктору Person за допомогою виклику:
Person.call(this, name, age);
Передача першого параметра дозволяє викликати функцію конструктор
Person для об'єкта, що створюється конструктором User. Завдяки цьому всі
властивості і методи, визначені в конструкторі Person, також переходять на
об'єкт User.
Крім того, необхідно успадкувати також і прототип Person. Для цього
служить виклик:
User.prototype = Object.create(Person.prototype);
Метод Object.create() дозволяє створити об'єкт прототипу Person,
який потім оформленого для прототипу User. При цьому при необхідності в
прототипі User також можемо визначити додаткові властивості і методи.
При спадкуванні можемо перевизначати успадкований функціонал.
Наприклад, User перевизначає метод displayInfo(), успадкований від
Person, щоб включити в висновок цього методу нову властивість company.
У сучасному JavaScript з'явився новий, «красивіший» синтаксис для класів.