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 з'явився новий, «красивіший» синтаксис для класів.
   97   98   99   100   101   102   103   104   105   106   107