0:00:01.187,0:00:03.173 Ми повертаємось до нашої програми, що[br]створює Вінстонів 0:00:03.173,0:00:07.589 але я додала новий тип об'єкту Хоппер, так[br]як він почував себе трішки 0:00:07.589,0:00:11.924 покинутим, зараз я визначаю Хоппера таким[br]самим способом як і Вінстона, ви знаєте 0:00:11.924,0:00:15.843 починаючи з конструктивної функції і[br]присвоюючи такі ж властивості і тоді малюю 0:00:15.843,0:00:20.498 а потім draw функцію. А після цього,[br]я додала інший метод, що називається 0:00:20.498,0:00:23.808 Ура![Hooray] так як Хоппер дійсно святкує[br]а Вінстон насправді 0:00:23.808,0:00:27.924 не зовсім. Зараз, вкінці функції ми[br]створили 0:00:27.924,0:00:31.174 два нових об'єкти Хоппер: Маленький Хоппер[br]та Великий Хоппер 0:00:31.174,0:00:35.347 і намалювати їх, і ввели, що один говорить[br]Ура іншому 0:00:36.427,0:00:37.508 Так що це дуже акуратно 0:00:37.508,0:00:39.928 Зараз, якщо поглянемо на цей код ось тут 0:00:39.928,0:00:42.833 ви можете помітити дещо цікаве. Те, що 0:00:42.833,0:00:49.324 код для Хоппера дуже подібний на код для[br]Вінстона. Частково виглядає як конструктор 0:00:49.324,0:00:52.844 Я не знаю, чи ви пам'ятаєте, але цей код в[br]загальному точно такий же як для 0:00:52.844,0:00:54.864 функції конструктора Вінстона 0:00:54.864,0:01:00.748 І ця функція talk[говорити] має точно [br]такий код, як наша функція talk Вінстона 0:01:00.763,0:01:03.897 і вони також обидва мають функції [br]draw[малювання] 0:01:03.897,0:01:07.382 Отже, у них є багато спільних речей у цих[br]двох видах об'єктів 0:01:07.382,0:01:11.341 і це тому, що, ну знаєте, Хоппер і Вінстон[br]дуже подібіні об'єкти 0:01:11.341,0:01:17.109 у нашому світі. І якщо ви задумаєтесь про[br]реальний світ за межами комп'ютера 0:01:17.109,0:01:20.723 більшість об'єктів поділяють деякі [br]загальні риси з іншими об'єктами. 0:01:20.723,0:01:23.643 Як в тваринному світі. Всі тварини 0:01:23.643,0:01:27.542 подібні в деяких моментах. І потім у нас[br]тип, що відрізняться від тварин, 0:01:27.542,0:01:31.588 як люди. І люди поділяють ці спільні риси 0:01:31.588,0:01:34.101 але також мають свої власні, неповторні[br]риси. 0:01:34.101,0:01:35.385 Отже, ми можемо сказати, що 0:01:35.385,0:01:41.587 тварина це тип об'єкта, від якого людський[br]тип успадковує функціональність. 0:01:41.587,0:01:45.484 Ми не почнемо повністю з нуля ми додамо[br]зверху функціональність, що ми 0:01:45.484,0:01:49.196 отримуємо будучи твариною. Наприклад всі[br]тварини видають звуки 0:01:49.196,0:01:51.407 а люди розмовляють мовою. 0:01:51.407,0:01:54.673 Таким чином, це поняття[br]успадкування об'єкта 0:01:54.673,0:01:56.695 є також корисним і в програмуванні також. 0:01:56.695,0:01:59.865 І ми можемо створити ланцюг успадковування[br]об'єктів в нашому Javascript. 0:01:59.865,0:02:02.529 Отже. щоб зробити це, коли ви думаєте 0:02:02.529,0:02:04.425 про спільні риси наших об'єктів. 0:02:04.425,0:02:06.633 І слід придумати ім'я для цього 0:02:06.633,0:02:08.675 так як ми створюємо новий тип об'єкта, 0:02:08.675,0:02:10.576 що представляє основний об'єкт 0:02:10.576,0:02:12.094 тому, назвемо їх істотами 0:02:12.094,0:02:13.873 Вони обоє істоти. 0:02:13.873,0:02:17.831 Отже, введемо var creature =. а зараз нам[br]потрібна функція конструктора 0:02:17.831,0:02:22.342 Тому, давайте поцупимо те, що є у Хоппера[br]і теж саме у Вінстона. 0:02:22.342,0:02:23.762 Гаразд 0:02:23.762,0:02:26.822 І тоді... подивимось 0:02:26.822,0:02:28.135 Зараз нам потрібно.. 0:02:28.135,0:02:29.506 Що ми хочемо робити далі? 0:02:29.506,0:02:31.966 Можливо ми хочемо додати функцію "talk" до[br]нього 0:02:31.966,0:02:37.233 Отже, для функії "talk", ми скопіюємо її з[br]Хоппера. Але звісно нам потрібно мати її 0:02:37.233,0:02:38.233 в об'єкті істоти. 0:02:39.793,0:02:40.783 Гаразд, класно. 0:02:40.783,0:02:44.753 Отже, зараз у нас є тип об'єкту істота. 0:02:45.823,0:02:49.310 але нам потрібно насправді ввести[br]Хопперу, що йому насправді слід 0:02:49.310,0:02:52.145 базувати свою функціональність, по[br]істоті. 0:02:52.145,0:02:58.996 Тому, ми можемо зробити це, пишучи рядок[br]тут. Введемо Hopper.prototype 0:02:58.996,0:03:04.215 = object.create(creature.prototype 0:03:04.815,0:03:09.707 Те, що ця лінія робить, це говорить [br]Javascript основувати прототип Хоппера, 0:03:09.707,0:03:14.197 тому, основа всієї функціональності [br]Хоппера відокремлена від прототипу істоти. 0:03:14.197,0:03:20.982 І тоді це означає, що кожен раз, коли вона[br]шукає функції в Хоппера це буде в 0:03:20.982,0:03:22.342 прототипі Хоппера 0:03:22.342,0:03:26.429 спочатку, але потім, якщо не знайде це, [br]вона пошукає, в прототипі істоти 0:03:26.429,0:03:29.196 І це те, що назвиваємо ланцюжком [br]прототипів 0:03:29.196,0:03:34.032 Тепер, коли ми зробили це, ми наспрадві [br]змогли б видалити функцію talk 0:03:34.032,0:03:35.634 В Хоппера 0:03:35.634,0:03:37.822 Так як вона вже існує в істоти. 0:03:37.822,0:03:39.931 Що є ланцюжком прототипів. 0:03:39.931,0:03:41.921 Готові? 0:03:41.921,0:03:43.594 Це працює! 0:03:43.594,0:03:46.804 І це працює так як воно находить це в [br]прототипі істоти. 0:03:48.694,0:03:51.234 Що ж, пробуємо видалити Вінстона також. 0:03:53.564,0:03:57.680 Гаразд. Це не спрацювало, вона говорить,[br]об'єкт не має ніякого методу говорити. 0:03:57.680,0:04:01.263 І саме це так? Ну у нас є наш [br]конструктор Вінстона 0:04:01.263,0:04:03.517 і функція draw і ми забрали функцію talk. 0:04:03.517,0:04:07.304 Ну, ви помітили, що ми забули ввести [br]насправді, щоб прототип Вінстон, базувався 0:04:07.304,0:04:08.669 на прототипі істота. 0:04:08.669,0:04:10.801 Отже. нам потрібно саме цей дуже важливий[br]рядок. 0:04:10.801,0:04:13.043 Winston.prototype=object.create[br] 0:04:13.043,0:04:15.194 creature.portotype. 0:04:18.114,0:04:19.080 Тада! 0:04:19.080,0:04:20.426 І зверніть увагу на дещо важливе. 0:04:20.426,0:04:26.097 У мене цей рядок після функції конструктор[br]але перед тим, ніж я що-небудь додам до 0:04:26.097,0:04:27.008 прототипу Вінстона. 0:04:27.008,0:04:29.054 Так що, це зазвичай, те, що ви хочете [br]зробити. 0:04:29.054,0:04:30.440 Ви хочете сказати це так само 0:04:30.440,0:04:33.660 як ви негайно починаєте, це те,[br]на чому ваш початковий прототип буде 0:04:33.660,0:04:36.804 заснований. І тоді ми продовжимо додавати[br]більше матеріалу до цього прототипу 0:04:36.804,0:04:41.673 Тому що може бути щось унікальними у [br]Вінстона або неповторним в Хоппера 0:04:41.673,0:04:42.949 чого немає в істот. 0:04:42.949,0:04:45.405 І це однозначно класно, що ви можете[br]визначити це. 0:04:46.415,0:04:50.096 Гаразд. Зараз, якщо поглянемо на це, у нас[br]все ще є трохи коду, що повторюється 0:04:50.096,0:04:51.524 Код конструктора. 0:04:51.524,0:04:53.366 Чи не так? У нас він всі три рази. 0:04:53.366,0:04:56.638 Чи ми зможемо його видалити? 0:04:57.628,0:04:58.830 Спробуємо. 0:04:59.730,0:05:03.509 Добре...щось не виглядає так, що це працює 0:05:03.509,0:05:07.340 Тому що наш Хоппер з'явився у верхньому [br]лівому кутку, ніби він забув все про себе. 0:05:07.340,0:05:12.264 І це тому, що Javascript не припускав, що[br]ви хочете, один і той же конструктор, 0:05:12.264,0:05:15.264 навіть якщо ви хочете, мати прототип[br]на його основі. 0:05:15.264,0:05:19.359 Ви знаєте, це дозволяє вам визначити свій[br]власний конструктор для цих об'єктів. 0:05:19.359,0:05:26.098 Але це також дає вам справді простий[br]спосіб викликати конструктор з об'єкта 0:05:26.098,0:05:35.302 І спосіб, яким ми зробимо це, ми напишемо[br]creature.callthis,nickname,age,x,y 0:05:35.470,0:05:40.598 Тепер, що це робить (Зверніть увагу, це [br]спрацювало.) І те що це зробило, це 0:05:40.598,0:05:43.679 насправді викликає функції істоти,[br]та функції конструктора. 0:05:43.679,0:05:48.629 Це викликає цю функцію, але вона проходить[br]і говорить добре, ви повинні викликати 0:05:48.629,0:05:53.764 цю функцію конструктора, так як якщо б це[br]викликалось з об'єкта Хоппер. 0:05:53.764,0:05:56.968 і, ніби вона викликається з[br]цими аргументами. 0:05:56.968,0:05:59.427 Ці аргументи з яким Хоппер викликається. 0:05:59.427,0:06:03.589 І це завершить тільки виконання цього коду[br]так якщо б він був тут. 0:06:03.589,0:06:06.157 Це саме те, що ми хочемо. І це спрацювало. 0:06:06.157,0:06:08.869 І ми можемо рухатись далі і 0:06:08.869,0:06:13.475 скопіювати цей рядок до конструктора [br]Вінстона також. 0:06:14.917,0:06:16.531 І це працює. Ура! 0:06:16.531,0:06:20.601 Гаразд. Так що перевіримо це. Ми коротко [br]виклали всі наші загальні властивості 0:06:20.601,0:06:24.901 і функціональні можливості в цьому [br]одному типі базового об'єкта, істота 0:06:24.901,0:06:28.207 І ми зробили два об'єкти, які поширюються[br]від цього основного об'єкта. 0:06:28.207,0:06:30.981 Вони успадкували деякі функціональні [br]можливості але і додали свої власні. 0:06:32.011,0:06:36.339 І здорово, те що ми можемо змінити [br]загальну функціональність в одному місці. 0:06:36.339,0:06:40.302 Наприклад якби ми хотіли змінити вік знову[br]ми могли б ввести плюс років [+ yrs old] 0:06:41.252,0:06:43.478 Тепер у кожного є "роки" в кінці. 0:06:43.908,0:06:50.681 Або ми могли б змінити функції "talk" і [br]буде як "Вау". А тепер обидва Вінстони та 0:06:50.681,0:06:52.391 Хоппери кажуть "Суп" 0:06:52.981,0:06:56.804 Так що тепер, ви побачили, як створювати [br]типи об'єктів і успадковування від них 0:06:56.804,0:06:58.638 ви можете почати думати про те, як це [br]могло б бути корисним у ваших 0:06:58.638,0:07:01.348 малюках, анімацій, моделюванні та іграх. 0:07:01.348,0:07:04.807 Наприклад, може бути, у вас є гра, і у вас[br]є багато типів героїв в ньому 0:07:04.807,0:07:07.683 і всі вони можуть бігти, але тільки деякі [br]з них можуть стрибати. 0:07:07.683,0:07:11.970 Це ідеальне місце, від деяких типів[br]об'єктів і деякого успадковування. 0:07:11.970,0:07:14.810 Але я впевнена, ви можете придумати безліч[br]більше способів також.