Ми повертаємось до нашої програми, що створює Вінстонів
але я додала новий тип об'єкту Хоппер, так як він почував себе трішки
покинутим, зараз я визначаю Хоппера таким самим способом як і Вінстона, ви знаєте
починаючи з конструктивної функції і присвоюючи такі ж властивості і тоді малюю
а потім draw функцію. А після цього, я додала інший метод, що називається
Ура![Hooray] так як Хоппер дійсно святкує а Вінстон насправді
не зовсім. Зараз, вкінці функції ми створили
два нових об'єкти Хоппер: Маленький Хоппер та Великий Хоппер
і намалювати їх, і ввели, що один говорить Ура іншому
Так що це дуже акуратно
Зараз, якщо поглянемо на цей код ось тут
ви можете помітити дещо цікаве. Те, що
код для Хоппера дуже подібний на код для Вінстона. Частково виглядає як конструктор
Я не знаю, чи ви пам'ятаєте, але цей код в загальному точно такий же як для
функції конструктора Вінстона
І ця функція talk[говорити] має точно такий код, як наша функція talk Вінстона
і вони також обидва мають функції draw[малювання]
Отже, у них є багато спільних речей у цих двох видах об'єктів
і це тому, що, ну знаєте, Хоппер і Вінстон дуже подібіні об'єкти
у нашому світі. І якщо ви задумаєтесь про реальний світ за межами комп'ютера
більшість об'єктів поділяють деякі загальні риси з іншими об'єктами.
Як в тваринному світі. Всі тварини
подібні в деяких моментах. І потім у нас тип, що відрізняться від тварин,
як люди. І люди поділяють ці спільні риси
але також мають свої власні, неповторні риси.
Отже, ми можемо сказати, що
тварина це тип об'єкта, від якого людський тип успадковує функціональність.
Ми не почнемо повністю з нуля ми додамо зверху функціональність, що ми
отримуємо будучи твариною. Наприклад всі тварини видають звуки
а люди розмовляють мовою.
Таким чином, це поняття успадкування об'єкта
є також корисним і в програмуванні також.
І ми можемо створити ланцюг успадковування об'єктів в нашому Javascript.
Отже. щоб зробити це, коли ви думаєте
про спільні риси наших об'єктів.
І слід придумати ім'я для цього
так як ми створюємо новий тип об'єкта,
що представляє основний об'єкт
тому, назвемо їх істотами
Вони обоє істоти.
Отже, введемо var creature =. а зараз нам потрібна функція конструктора
Тому, давайте поцупимо те, що є у Хоппера і теж саме у Вінстона.
Гаразд
І тоді... подивимось
Зараз нам потрібно..
Що ми хочемо робити далі?
Можливо ми хочемо додати функцію "talk" до нього
Отже, для функії "talk", ми скопіюємо її з Хоппера. Але звісно нам потрібно мати її
в об'єкті істоти.
Гаразд, класно.
Отже, зараз у нас є тип об'єкту істота.
але нам потрібно насправді ввести Хопперу, що йому насправді слід
базувати свою функціональність, по істоті.
Тому, ми можемо зробити це, пишучи рядок тут. Введемо Hopper.prototype
= object.create(creature.prototype
Те, що ця лінія робить, це говорить Javascript основувати прототип Хоппера,
тому, основа всієї функціональності Хоппера відокремлена від прототипу істоти.
І тоді це означає, що кожен раз, коли вона шукає функції в Хоппера це буде в
прототипі Хоппера
спочатку, але потім, якщо не знайде це, вона пошукає, в прототипі істоти
І це те, що назвиваємо ланцюжком прототипів
Тепер, коли ми зробили це, ми наспрадві змогли б видалити функцію talk
В Хоппера
Так як вона вже існує в істоти.
Що є ланцюжком прототипів.
Готові?
Це працює!
І це працює так як воно находить це в прототипі істоти.
Що ж, пробуємо видалити Вінстона також.
Гаразд. Це не спрацювало, вона говорить, об'єкт не має ніякого методу говорити.
І саме це так? Ну у нас є наш конструктор Вінстона
і функція draw і ми забрали функцію talk.
Ну, ви помітили, що ми забули ввести насправді, щоб прототип Вінстон, базувався
на прототипі істота.
Отже. нам потрібно саме цей дуже важливий рядок.
Winston.prototype=object.create
creature.portotype.
Тада!
І зверніть увагу на дещо важливе.
У мене цей рядок після функції конструктор але перед тим, ніж я що-небудь додам до
прототипу Вінстона.
Так що, це зазвичай, те, що ви хочете зробити.
Ви хочете сказати це так само
як ви негайно починаєте, це те, на чому ваш початковий прототип буде
заснований. І тоді ми продовжимо додавати більше матеріалу до цього прототипу
Тому що може бути щось унікальними у Вінстона або неповторним в Хоппера
чого немає в істот.
І це однозначно класно, що ви можете визначити це.
Гаразд. Зараз, якщо поглянемо на це, у нас все ще є трохи коду, що повторюється
Код конструктора.
Чи не так? У нас він всі три рази.
Чи ми зможемо його видалити?
Спробуємо.
Добре...щось не виглядає так, що це працює
Тому що наш Хоппер з'явився у верхньому лівому кутку, ніби він забув все про себе.
І це тому, що Javascript не припускав, що ви хочете, один і той же конструктор,
навіть якщо ви хочете, мати прототип на його основі.
Ви знаєте, це дозволяє вам визначити свій власний конструктор для цих об'єктів.
Але це також дає вам справді простий спосіб викликати конструктор з об'єкта
І спосіб, яким ми зробимо це, ми напишемо creature.callthis,nickname,age,x,y
Тепер, що це робить (Зверніть увагу, це спрацювало.) І те що це зробило, це
насправді викликає функції істоти, та функції конструктора.
Це викликає цю функцію, але вона проходить і говорить добре, ви повинні викликати
цю функцію конструктора, так як якщо б це викликалось з об'єкта Хоппер.
і, ніби вона викликається з цими аргументами.
Ці аргументи з яким Хоппер викликається.
І це завершить тільки виконання цього коду так якщо б він був тут.
Це саме те, що ми хочемо. І це спрацювало.
І ми можемо рухатись далі і
скопіювати цей рядок до конструктора Вінстона також.
І це працює. Ура!
Гаразд. Так що перевіримо це. Ми коротко виклали всі наші загальні властивості
і функціональні можливості в цьому одному типі базового об'єкта, істота
І ми зробили два об'єкти, які поширюються від цього основного об'єкта.
Вони успадкували деякі функціональні можливості але і додали свої власні.
І здорово, те що ми можемо змінити загальну функціональність в одному місці.
Наприклад якби ми хотіли змінити вік знову ми могли б ввести плюс років [+ yrs old]
Тепер у кожного є "роки" в кінці.
Або ми могли б змінити функції "talk" і буде як "Вау". А тепер обидва Вінстони та
Хоппери кажуть "Суп"
Так що тепер, ви побачили, як створювати типи об'єктів і успадковування від них
ви можете почати думати про те, як це могло б бути корисним у ваших
малюках, анімацій, моделюванні та іграх.
Наприклад, може бути, у вас є гра, і у вас є багато типів героїв в ньому
і всі вони можуть бігти, але тільки деякі з них можуть стрибати.
Це ідеальне місце, від деяких типів об'єктів і деякого успадковування.
Але я впевнена, ви можете придумати безліч більше способів також.