1 00:00:01,187 --> 00:00:03,173 Ми повертаємось до нашої програми, що створює Вінстонів 2 00:00:03,173 --> 00:00:07,589 але я додала новий тип об'єкту Хоппер, так як він почував себе трішки 3 00:00:07,589 --> 00:00:11,924 покинутим, зараз я визначаю Хоппера таким самим способом як і Вінстона, ви знаєте 4 00:00:11,924 --> 00:00:15,843 починаючи з конструктивної функції і присвоюючи такі ж властивості і тоді малюю 5 00:00:15,843 --> 00:00:20,498 а потім draw функцію. А після цього, я додала інший метод, що називається 6 00:00:20,498 --> 00:00:23,808 Ура![Hooray] так як Хоппер дійсно святкує а Вінстон насправді 7 00:00:23,808 --> 00:00:27,924 не зовсім. Зараз, вкінці функції ми створили 8 00:00:27,924 --> 00:00:31,174 два нових об'єкти Хоппер: Маленький Хоппер та Великий Хоппер 9 00:00:31,174 --> 00:00:35,347 і намалювати їх, і ввели, що один говорить Ура іншому 10 00:00:36,427 --> 00:00:37,508 Так що це дуже акуратно 11 00:00:37,508 --> 00:00:39,928 Зараз, якщо поглянемо на цей код ось тут 12 00:00:39,928 --> 00:00:42,833 ви можете помітити дещо цікаве. Те, що 13 00:00:42,833 --> 00:00:49,324 код для Хоппера дуже подібний на код для Вінстона. Частково виглядає як конструктор 14 00:00:49,324 --> 00:00:52,844 Я не знаю, чи ви пам'ятаєте, але цей код в загальному точно такий же як для 15 00:00:52,844 --> 00:00:54,864 функції конструктора Вінстона 16 00:00:54,864 --> 00:01:00,748 І ця функція talk[говорити] має точно такий код, як наша функція talk Вінстона 17 00:01:00,763 --> 00:01:03,897 і вони також обидва мають функції draw[малювання] 18 00:01:03,897 --> 00:01:07,382 Отже, у них є багато спільних речей у цих двох видах об'єктів 19 00:01:07,382 --> 00:01:11,341 і це тому, що, ну знаєте, Хоппер і Вінстон дуже подібіні об'єкти 20 00:01:11,341 --> 00:01:17,109 у нашому світі. І якщо ви задумаєтесь про реальний світ за межами комп'ютера 21 00:01:17,109 --> 00:01:20,723 більшість об'єктів поділяють деякі загальні риси з іншими об'єктами. 22 00:01:20,723 --> 00:01:23,643 Як в тваринному світі. Всі тварини 23 00:01:23,643 --> 00:01:27,542 подібні в деяких моментах. І потім у нас тип, що відрізняться від тварин, 24 00:01:27,542 --> 00:01:31,588 як люди. І люди поділяють ці спільні риси 25 00:01:31,588 --> 00:01:34,101 але також мають свої власні, неповторні риси. 26 00:01:34,101 --> 00:01:35,385 Отже, ми можемо сказати, що 27 00:01:35,385 --> 00:01:41,587 тварина це тип об'єкта, від якого людський тип успадковує функціональність. 28 00:01:41,587 --> 00:01:45,484 Ми не почнемо повністю з нуля ми додамо зверху функціональність, що ми 29 00:01:45,484 --> 00:01:49,196 отримуємо будучи твариною. Наприклад всі тварини видають звуки 30 00:01:49,196 --> 00:01:51,407 а люди розмовляють мовою. 31 00:01:51,407 --> 00:01:54,673 Таким чином, це поняття успадкування об'єкта 32 00:01:54,673 --> 00:01:56,695 є також корисним і в програмуванні також. 33 00:01:56,695 --> 00:01:59,865 І ми можемо створити ланцюг успадковування об'єктів в нашому Javascript. 34 00:01:59,865 --> 00:02:02,529 Отже. щоб зробити це, коли ви думаєте 35 00:02:02,529 --> 00:02:04,425 про спільні риси наших об'єктів. 36 00:02:04,425 --> 00:02:06,633 І слід придумати ім'я для цього 37 00:02:06,633 --> 00:02:08,675 так як ми створюємо новий тип об'єкта, 38 00:02:08,675 --> 00:02:10,576 що представляє основний об'єкт 39 00:02:10,576 --> 00:02:12,094 тому, назвемо їх істотами 40 00:02:12,094 --> 00:02:13,873 Вони обоє істоти. 41 00:02:13,873 --> 00:02:17,831 Отже, введемо var creature =. а зараз нам потрібна функція конструктора 42 00:02:17,831 --> 00:02:22,342 Тому, давайте поцупимо те, що є у Хоппера і теж саме у Вінстона. 43 00:02:22,342 --> 00:02:23,762 Гаразд 44 00:02:23,762 --> 00:02:26,822 І тоді... подивимось 45 00:02:26,822 --> 00:02:28,135 Зараз нам потрібно.. 46 00:02:28,135 --> 00:02:29,506 Що ми хочемо робити далі? 47 00:02:29,506 --> 00:02:31,966 Можливо ми хочемо додати функцію "talk" до нього 48 00:02:31,966 --> 00:02:37,233 Отже, для функії "talk", ми скопіюємо її з Хоппера. Але звісно нам потрібно мати її 49 00:02:37,233 --> 00:02:38,233 в об'єкті істоти. 50 00:02:39,793 --> 00:02:40,783 Гаразд, класно. 51 00:02:40,783 --> 00:02:44,753 Отже, зараз у нас є тип об'єкту істота. 52 00:02:45,823 --> 00:02:49,310 але нам потрібно насправді ввести Хопперу, що йому насправді слід 53 00:02:49,310 --> 00:02:52,145 базувати свою функціональність, по істоті. 54 00:02:52,145 --> 00:02:58,996 Тому, ми можемо зробити це, пишучи рядок тут. Введемо Hopper.prototype 55 00:02:58,996 --> 00:03:04,215 = object.create(creature.prototype 56 00:03:04,815 --> 00:03:09,707 Те, що ця лінія робить, це говорить Javascript основувати прототип Хоппера, 57 00:03:09,707 --> 00:03:14,197 тому, основа всієї функціональності Хоппера відокремлена від прототипу істоти. 58 00:03:14,197 --> 00:03:20,982 І тоді це означає, що кожен раз, коли вона шукає функції в Хоппера це буде в 59 00:03:20,982 --> 00:03:22,342 прототипі Хоппера 60 00:03:22,342 --> 00:03:26,429 спочатку, але потім, якщо не знайде це, вона пошукає, в прототипі істоти 61 00:03:26,429 --> 00:03:29,196 І це те, що назвиваємо ланцюжком прототипів 62 00:03:29,196 --> 00:03:34,032 Тепер, коли ми зробили це, ми наспрадві змогли б видалити функцію talk 63 00:03:34,032 --> 00:03:35,634 В Хоппера 64 00:03:35,634 --> 00:03:37,822 Так як вона вже існує в істоти. 65 00:03:37,822 --> 00:03:39,931 Що є ланцюжком прототипів. 66 00:03:39,931 --> 00:03:41,921 Готові? 67 00:03:41,921 --> 00:03:43,594 Це працює! 68 00:03:43,594 --> 00:03:46,804 І це працює так як воно находить це в прототипі істоти. 69 00:03:48,694 --> 00:03:51,234 Що ж, пробуємо видалити Вінстона також. 70 00:03:53,564 --> 00:03:57,680 Гаразд. Це не спрацювало, вона говорить, об'єкт не має ніякого методу говорити. 71 00:03:57,680 --> 00:04:01,263 І саме це так? Ну у нас є наш конструктор Вінстона 72 00:04:01,263 --> 00:04:03,517 і функція draw і ми забрали функцію talk. 73 00:04:03,517 --> 00:04:07,304 Ну, ви помітили, що ми забули ввести насправді, щоб прототип Вінстон, базувався 74 00:04:07,304 --> 00:04:08,669 на прототипі істота. 75 00:04:08,669 --> 00:04:10,801 Отже. нам потрібно саме цей дуже важливий рядок. 76 00:04:10,801 --> 00:04:13,043 Winston.prototype=object.create 77 00:04:13,043 --> 00:04:15,194 creature.portotype. 78 00:04:18,114 --> 00:04:19,080 Тада! 79 00:04:19,080 --> 00:04:20,426 І зверніть увагу на дещо важливе. 80 00:04:20,426 --> 00:04:26,097 У мене цей рядок після функції конструктор але перед тим, ніж я що-небудь додам до 81 00:04:26,097 --> 00:04:27,008 прототипу Вінстона. 82 00:04:27,008 --> 00:04:29,054 Так що, це зазвичай, те, що ви хочете зробити. 83 00:04:29,054 --> 00:04:30,440 Ви хочете сказати це так само 84 00:04:30,440 --> 00:04:33,660 як ви негайно починаєте, це те, на чому ваш початковий прототип буде 85 00:04:33,660 --> 00:04:36,804 заснований. І тоді ми продовжимо додавати більше матеріалу до цього прототипу 86 00:04:36,804 --> 00:04:41,673 Тому що може бути щось унікальними у Вінстона або неповторним в Хоппера 87 00:04:41,673 --> 00:04:42,949 чого немає в істот. 88 00:04:42,949 --> 00:04:45,405 І це однозначно класно, що ви можете визначити це. 89 00:04:46,415 --> 00:04:50,096 Гаразд. Зараз, якщо поглянемо на це, у нас все ще є трохи коду, що повторюється 90 00:04:50,096 --> 00:04:51,524 Код конструктора. 91 00:04:51,524 --> 00:04:53,366 Чи не так? У нас він всі три рази. 92 00:04:53,366 --> 00:04:56,638 Чи ми зможемо його видалити? 93 00:04:57,628 --> 00:04:58,830 Спробуємо. 94 00:04:59,730 --> 00:05:03,509 Добре...щось не виглядає так, що це працює 95 00:05:03,509 --> 00:05:07,340 Тому що наш Хоппер з'явився у верхньому лівому кутку, ніби він забув все про себе. 96 00:05:07,340 --> 00:05:12,264 І це тому, що Javascript не припускав, що ви хочете, один і той же конструктор, 97 00:05:12,264 --> 00:05:15,264 навіть якщо ви хочете, мати прототип на його основі. 98 00:05:15,264 --> 00:05:19,359 Ви знаєте, це дозволяє вам визначити свій власний конструктор для цих об'єктів. 99 00:05:19,359 --> 00:05:26,098 Але це також дає вам справді простий спосіб викликати конструктор з об'єкта 100 00:05:26,098 --> 00:05:35,302 І спосіб, яким ми зробимо це, ми напишемо creature.callthis,nickname,age,x,y 101 00:05:35,470 --> 00:05:40,598 Тепер, що це робить (Зверніть увагу, це спрацювало.) І те що це зробило, це 102 00:05:40,598 --> 00:05:43,679 насправді викликає функції істоти, та функції конструктора. 103 00:05:43,679 --> 00:05:48,629 Це викликає цю функцію, але вона проходить і говорить добре, ви повинні викликати 104 00:05:48,629 --> 00:05:53,764 цю функцію конструктора, так як якщо б це викликалось з об'єкта Хоппер. 105 00:05:53,764 --> 00:05:56,968 і, ніби вона викликається з цими аргументами. 106 00:05:56,968 --> 00:05:59,427 Ці аргументи з яким Хоппер викликається. 107 00:05:59,427 --> 00:06:03,589 І це завершить тільки виконання цього коду так якщо б він був тут. 108 00:06:03,589 --> 00:06:06,157 Це саме те, що ми хочемо. І це спрацювало. 109 00:06:06,157 --> 00:06:08,869 І ми можемо рухатись далі і 110 00:06:08,869 --> 00:06:13,475 скопіювати цей рядок до конструктора Вінстона також. 111 00:06:14,917 --> 00:06:16,531 І це працює. Ура! 112 00:06:16,531 --> 00:06:20,601 Гаразд. Так що перевіримо це. Ми коротко виклали всі наші загальні властивості 113 00:06:20,601 --> 00:06:24,901 і функціональні можливості в цьому одному типі базового об'єкта, істота 114 00:06:24,901 --> 00:06:28,207 І ми зробили два об'єкти, які поширюються від цього основного об'єкта. 115 00:06:28,207 --> 00:06:30,981 Вони успадкували деякі функціональні можливості але і додали свої власні. 116 00:06:32,011 --> 00:06:36,339 І здорово, те що ми можемо змінити загальну функціональність в одному місці. 117 00:06:36,339 --> 00:06:40,302 Наприклад якби ми хотіли змінити вік знову ми могли б ввести плюс років [+ yrs old] 118 00:06:41,252 --> 00:06:43,478 Тепер у кожного є "роки" в кінці. 119 00:06:43,908 --> 00:06:50,681 Або ми могли б змінити функції "talk" і буде як "Вау". А тепер обидва Вінстони та 120 00:06:50,681 --> 00:06:52,391 Хоппери кажуть "Суп" 121 00:06:52,981 --> 00:06:56,804 Так що тепер, ви побачили, як створювати типи об'єктів і успадковування від них 122 00:06:56,804 --> 00:06:58,638 ви можете почати думати про те, як це могло б бути корисним у ваших 123 00:06:58,638 --> 00:07:01,348 малюках, анімацій, моделюванні та іграх. 124 00:07:01,348 --> 00:07:04,807 Наприклад, може бути, у вас є гра, і у вас є багато типів героїв в ньому 125 00:07:04,807 --> 00:07:07,683 і всі вони можуть бігти, але тільки деякі з них можуть стрибати. 126 00:07:07,683 --> 00:07:11,970 Це ідеальне місце, від деяких типів об'єктів і деякого успадковування. 127 00:07:11,970 --> 00:07:14,810 Але я впевнена, ви можете придумати безліч більше способів також.