[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.19,0:00:03.17,Default,,0000,0000,0000,,Ми повертаємось до нашої програми, що\Nстворює Вінстонів Dialogue: 0,0:00:03.17,0:00:07.59,Default,,0000,0000,0000,,але я додала новий тип об'єкту Хоппер, так\Nяк він почував себе трішки Dialogue: 0,0:00:07.59,0:00:11.92,Default,,0000,0000,0000,,покинутим, зараз я визначаю Хоппера таким\Nсамим способом як і Вінстона, ви знаєте Dialogue: 0,0:00:11.92,0:00:15.84,Default,,0000,0000,0000,,починаючи з конструктивної функції і\Nприсвоюючи такі ж властивості і тоді малюю Dialogue: 0,0:00:15.84,0:00:20.50,Default,,0000,0000,0000,,а потім draw функцію. А після цього,\Nя додала інший метод, що називається Dialogue: 0,0:00:20.50,0:00:23.81,Default,,0000,0000,0000,,Ура![Hooray] так як Хоппер дійсно святкує\Nа Вінстон насправді Dialogue: 0,0:00:23.81,0:00:27.92,Default,,0000,0000,0000,,не зовсім. Зараз, вкінці функції ми\Nстворили Dialogue: 0,0:00:27.92,0:00:31.17,Default,,0000,0000,0000,,два нових об'єкти Хоппер: Маленький Хоппер\Nта Великий Хоппер Dialogue: 0,0:00:31.17,0:00:35.35,Default,,0000,0000,0000,,і намалювати їх, і ввели, що один говорить\NУра іншому Dialogue: 0,0:00:36.43,0:00:37.51,Default,,0000,0000,0000,,Так що це дуже акуратно Dialogue: 0,0:00:37.51,0:00:39.93,Default,,0000,0000,0000,,Зараз, якщо поглянемо на цей код ось тут Dialogue: 0,0:00:39.93,0:00:42.83,Default,,0000,0000,0000,,ви можете помітити дещо цікаве. Те, що Dialogue: 0,0:00:42.83,0:00:49.32,Default,,0000,0000,0000,,код для Хоппера дуже подібний на код для\NВінстона. Частково виглядає як конструктор Dialogue: 0,0:00:49.32,0:00:52.84,Default,,0000,0000,0000,,Я не знаю, чи ви пам'ятаєте, але цей код в\Nзагальному точно такий же як для Dialogue: 0,0:00:52.84,0:00:54.86,Default,,0000,0000,0000,,функції конструктора Вінстона Dialogue: 0,0:00:54.86,0:01:00.75,Default,,0000,0000,0000,,І ця функція talk[говорити] має точно \Nтакий код, як наша функція talk Вінстона Dialogue: 0,0:01:00.76,0:01:03.90,Default,,0000,0000,0000,,і вони також обидва мають функції \Ndraw[малювання] Dialogue: 0,0:01:03.90,0:01:07.38,Default,,0000,0000,0000,,Отже, у них є багато спільних речей у цих\Nдвох видах об'єктів Dialogue: 0,0:01:07.38,0:01:11.34,Default,,0000,0000,0000,,і це тому, що, ну знаєте, Хоппер і Вінстон\Nдуже подібіні об'єкти Dialogue: 0,0:01:11.34,0:01:17.11,Default,,0000,0000,0000,,у нашому світі. І якщо ви задумаєтесь про\Nреальний світ за межами комп'ютера Dialogue: 0,0:01:17.11,0:01:20.72,Default,,0000,0000,0000,,більшість об'єктів поділяють деякі \Nзагальні риси з іншими об'єктами. Dialogue: 0,0:01:20.72,0:01:23.64,Default,,0000,0000,0000,,Як в тваринному світі. Всі тварини Dialogue: 0,0:01:23.64,0:01:27.54,Default,,0000,0000,0000,,подібні в деяких моментах. І потім у нас\Nтип, що відрізняться від тварин, Dialogue: 0,0:01:27.54,0:01:31.59,Default,,0000,0000,0000,,як люди. І люди поділяють ці спільні риси Dialogue: 0,0:01:31.59,0:01:34.10,Default,,0000,0000,0000,,але також мають свої власні, неповторні\Nриси. Dialogue: 0,0:01:34.10,0:01:35.38,Default,,0000,0000,0000,,Отже, ми можемо сказати, що Dialogue: 0,0:01:35.38,0:01:41.59,Default,,0000,0000,0000,,тварина це тип об'єкта, від якого людський\Nтип успадковує функціональність. Dialogue: 0,0:01:41.59,0:01:45.48,Default,,0000,0000,0000,,Ми не почнемо повністю з нуля ми додамо\Nзверху функціональність, що ми Dialogue: 0,0:01:45.48,0:01:49.20,Default,,0000,0000,0000,,отримуємо будучи твариною. Наприклад всі\Nтварини видають звуки Dialogue: 0,0:01:49.20,0:01:51.41,Default,,0000,0000,0000,,а люди розмовляють мовою. Dialogue: 0,0:01:51.41,0:01:54.67,Default,,0000,0000,0000,,Таким чином, це поняття\Nуспадкування об'єкта Dialogue: 0,0:01:54.67,0:01:56.70,Default,,0000,0000,0000,,є також корисним і в програмуванні також. Dialogue: 0,0:01:56.70,0:01:59.86,Default,,0000,0000,0000,,І ми можемо створити ланцюг успадковування\Nоб'єктів в нашому Javascript. Dialogue: 0,0:01:59.86,0:02:02.53,Default,,0000,0000,0000,,Отже. щоб зробити це, коли ви думаєте Dialogue: 0,0:02:02.53,0:02:04.42,Default,,0000,0000,0000,,про спільні риси наших об'єктів. Dialogue: 0,0:02:04.42,0:02:06.63,Default,,0000,0000,0000,,І слід придумати ім'я для цього Dialogue: 0,0:02:06.63,0:02:08.68,Default,,0000,0000,0000,,так як ми створюємо новий тип об'єкта, Dialogue: 0,0:02:08.68,0:02:10.58,Default,,0000,0000,0000,,що представляє основний об'єкт Dialogue: 0,0:02:10.58,0:02:12.09,Default,,0000,0000,0000,,тому, назвемо їх істотами Dialogue: 0,0:02:12.09,0:02:13.87,Default,,0000,0000,0000,,Вони обоє істоти. Dialogue: 0,0:02:13.87,0:02:17.83,Default,,0000,0000,0000,,Отже, введемо var creature =. а зараз нам\Nпотрібна функція конструктора Dialogue: 0,0:02:17.83,0:02:22.34,Default,,0000,0000,0000,,Тому, давайте поцупимо те, що є у Хоппера\Nі теж саме у Вінстона. Dialogue: 0,0:02:22.34,0:02:23.76,Default,,0000,0000,0000,,Гаразд Dialogue: 0,0:02:23.76,0:02:26.82,Default,,0000,0000,0000,,І тоді... подивимось Dialogue: 0,0:02:26.82,0:02:28.14,Default,,0000,0000,0000,,Зараз нам потрібно.. Dialogue: 0,0:02:28.14,0:02:29.51,Default,,0000,0000,0000,,Що ми хочемо робити далі? Dialogue: 0,0:02:29.51,0:02:31.97,Default,,0000,0000,0000,,Можливо ми хочемо додати функцію "talk" до\Nнього Dialogue: 0,0:02:31.97,0:02:37.23,Default,,0000,0000,0000,,Отже, для функії "talk", ми скопіюємо її з\NХоппера. Але звісно нам потрібно мати її Dialogue: 0,0:02:37.23,0:02:38.23,Default,,0000,0000,0000,,в об'єкті істоти. Dialogue: 0,0:02:39.79,0:02:40.78,Default,,0000,0000,0000,,Гаразд, класно. Dialogue: 0,0:02:40.78,0:02:44.75,Default,,0000,0000,0000,,Отже, зараз у нас є тип об'єкту істота. Dialogue: 0,0:02:45.82,0:02:49.31,Default,,0000,0000,0000,,але нам потрібно насправді ввести\NХопперу, що йому насправді слід Dialogue: 0,0:02:49.31,0:02:52.14,Default,,0000,0000,0000,,базувати свою функціональність, по\Nістоті. Dialogue: 0,0:02:52.14,0:02:58.100,Default,,0000,0000,0000,,Тому, ми можемо зробити це, пишучи рядок\Nтут. Введемо Hopper.prototype Dialogue: 0,0:02:58.100,0:03:04.22,Default,,0000,0000,0000,,= object.create(creature.prototype Dialogue: 0,0:03:04.82,0:03:09.71,Default,,0000,0000,0000,,Те, що ця лінія робить, це говорить \NJavascript основувати прототип Хоппера, Dialogue: 0,0:03:09.71,0:03:14.20,Default,,0000,0000,0000,,тому, основа всієї функціональності \NХоппера відокремлена від прототипу істоти. Dialogue: 0,0:03:14.20,0:03:20.98,Default,,0000,0000,0000,,І тоді це означає, що кожен раз, коли вона\Nшукає функції в Хоппера це буде в Dialogue: 0,0:03:20.98,0:03:22.34,Default,,0000,0000,0000,,прототипі Хоппера Dialogue: 0,0:03:22.34,0:03:26.43,Default,,0000,0000,0000,,спочатку, але потім, якщо не знайде це, \Nвона пошукає, в прототипі істоти Dialogue: 0,0:03:26.43,0:03:29.20,Default,,0000,0000,0000,,І це те, що назвиваємо ланцюжком \Nпрототипів Dialogue: 0,0:03:29.20,0:03:34.03,Default,,0000,0000,0000,,Тепер, коли ми зробили це, ми наспрадві \Nзмогли б видалити функцію talk Dialogue: 0,0:03:34.03,0:03:35.63,Default,,0000,0000,0000,,В Хоппера Dialogue: 0,0:03:35.63,0:03:37.82,Default,,0000,0000,0000,,Так як вона вже існує в істоти. Dialogue: 0,0:03:37.82,0:03:39.93,Default,,0000,0000,0000,,Що є ланцюжком прототипів. Dialogue: 0,0:03:39.93,0:03:41.92,Default,,0000,0000,0000,,Готові? Dialogue: 0,0:03:41.92,0:03:43.59,Default,,0000,0000,0000,,Це працює! Dialogue: 0,0:03:43.59,0:03:46.80,Default,,0000,0000,0000,,І це працює так як воно находить це в \Nпрототипі істоти. Dialogue: 0,0:03:48.69,0:03:51.23,Default,,0000,0000,0000,,Що ж, пробуємо видалити Вінстона також. Dialogue: 0,0:03:53.56,0:03:57.68,Default,,0000,0000,0000,,Гаразд. Це не спрацювало, вона говорить,\Nоб'єкт не має ніякого методу говорити. Dialogue: 0,0:03:57.68,0:04:01.26,Default,,0000,0000,0000,,І саме це так? Ну у нас є наш \Nконструктор Вінстона Dialogue: 0,0:04:01.26,0:04:03.52,Default,,0000,0000,0000,,і функція draw і ми забрали функцію talk. Dialogue: 0,0:04:03.52,0:04:07.30,Default,,0000,0000,0000,,Ну, ви помітили, що ми забули ввести \Nнасправді, щоб прототип Вінстон, базувався Dialogue: 0,0:04:07.30,0:04:08.67,Default,,0000,0000,0000,,на прототипі істота. Dialogue: 0,0:04:08.67,0:04:10.80,Default,,0000,0000,0000,,Отже. нам потрібно саме цей дуже важливий\Nрядок. Dialogue: 0,0:04:10.80,0:04:13.04,Default,,0000,0000,0000,,Winston.prototype=object.create\N Dialogue: 0,0:04:13.04,0:04:15.19,Default,,0000,0000,0000,,creature.portotype. Dialogue: 0,0:04:18.11,0:04:19.08,Default,,0000,0000,0000,,Тада! Dialogue: 0,0:04:19.08,0:04:20.43,Default,,0000,0000,0000,,І зверніть увагу на дещо важливе. Dialogue: 0,0:04:20.43,0:04:26.10,Default,,0000,0000,0000,,У мене цей рядок після функції конструктор\Nале перед тим, ніж я що-небудь додам до Dialogue: 0,0:04:26.10,0:04:27.01,Default,,0000,0000,0000,,прототипу Вінстона. Dialogue: 0,0:04:27.01,0:04:29.05,Default,,0000,0000,0000,,Так що, це зазвичай, те, що ви хочете \Nзробити. Dialogue: 0,0:04:29.05,0:04:30.44,Default,,0000,0000,0000,,Ви хочете сказати це так само Dialogue: 0,0:04:30.44,0:04:33.66,Default,,0000,0000,0000,,як ви негайно починаєте, це те,\Nна чому ваш початковий прототип буде Dialogue: 0,0:04:33.66,0:04:36.80,Default,,0000,0000,0000,,заснований. І тоді ми продовжимо додавати\Nбільше матеріалу до цього прототипу Dialogue: 0,0:04:36.80,0:04:41.67,Default,,0000,0000,0000,,Тому що може бути щось унікальними у \NВінстона або неповторним в Хоппера Dialogue: 0,0:04:41.67,0:04:42.95,Default,,0000,0000,0000,,чого немає в істот. Dialogue: 0,0:04:42.95,0:04:45.40,Default,,0000,0000,0000,,І це однозначно класно, що ви можете\Nвизначити це. Dialogue: 0,0:04:46.42,0:04:50.10,Default,,0000,0000,0000,,Гаразд. Зараз, якщо поглянемо на це, у нас\Nвсе ще є трохи коду, що повторюється Dialogue: 0,0:04:50.10,0:04:51.52,Default,,0000,0000,0000,,Код конструктора. Dialogue: 0,0:04:51.52,0:04:53.37,Default,,0000,0000,0000,,Чи не так? У нас він всі три рази. Dialogue: 0,0:04:53.37,0:04:56.64,Default,,0000,0000,0000,,Чи ми зможемо його видалити? Dialogue: 0,0:04:57.63,0:04:58.83,Default,,0000,0000,0000,,Спробуємо. Dialogue: 0,0:04:59.73,0:05:03.51,Default,,0000,0000,0000,,Добре...щось не виглядає так, що це працює Dialogue: 0,0:05:03.51,0:05:07.34,Default,,0000,0000,0000,,Тому що наш Хоппер з'явився у верхньому \Nлівому кутку, ніби він забув все про себе. Dialogue: 0,0:05:07.34,0:05:12.26,Default,,0000,0000,0000,,І це тому, що Javascript не припускав, що\Nви хочете, один і той же конструктор, Dialogue: 0,0:05:12.26,0:05:15.26,Default,,0000,0000,0000,,навіть якщо ви хочете, мати прототип\Nна його основі. Dialogue: 0,0:05:15.26,0:05:19.36,Default,,0000,0000,0000,,Ви знаєте, це дозволяє вам визначити свій\Nвласний конструктор для цих об'єктів. Dialogue: 0,0:05:19.36,0:05:26.10,Default,,0000,0000,0000,,Але це також дає вам справді простий\Nспосіб викликати конструктор з об'єкта Dialogue: 0,0:05:26.10,0:05:35.30,Default,,0000,0000,0000,,І спосіб, яким ми зробимо це, ми напишемо\Ncreature.callthis,nickname,age,x,y Dialogue: 0,0:05:35.47,0:05:40.60,Default,,0000,0000,0000,,Тепер, що це робить (Зверніть увагу, це \Nспрацювало.) І те що це зробило, це Dialogue: 0,0:05:40.60,0:05:43.68,Default,,0000,0000,0000,,насправді викликає функції істоти,\Nта функції конструктора. Dialogue: 0,0:05:43.68,0:05:48.63,Default,,0000,0000,0000,,Це викликає цю функцію, але вона проходить\Nі говорить добре, ви повинні викликати Dialogue: 0,0:05:48.63,0:05:53.76,Default,,0000,0000,0000,,цю функцію конструктора, так як якщо б це\Nвикликалось з об'єкта Хоппер. Dialogue: 0,0:05:53.76,0:05:56.97,Default,,0000,0000,0000,,і, ніби вона викликається з\Nцими аргументами. Dialogue: 0,0:05:56.97,0:05:59.43,Default,,0000,0000,0000,,Ці аргументи з яким Хоппер викликається. Dialogue: 0,0:05:59.43,0:06:03.59,Default,,0000,0000,0000,,І це завершить тільки виконання цього коду\Nтак якщо б він був тут. Dialogue: 0,0:06:03.59,0:06:06.16,Default,,0000,0000,0000,,Це саме те, що ми хочемо. І це спрацювало. Dialogue: 0,0:06:06.16,0:06:08.87,Default,,0000,0000,0000,,І ми можемо рухатись далі і Dialogue: 0,0:06:08.87,0:06:13.48,Default,,0000,0000,0000,,скопіювати цей рядок до конструктора \NВінстона також. Dialogue: 0,0:06:14.92,0:06:16.53,Default,,0000,0000,0000,,І це працює. Ура! Dialogue: 0,0:06:16.53,0:06:20.60,Default,,0000,0000,0000,,Гаразд. Так що перевіримо це. Ми коротко \Nвиклали всі наші загальні властивості Dialogue: 0,0:06:20.60,0:06:24.90,Default,,0000,0000,0000,,і функціональні можливості в цьому \Nодному типі базового об'єкта, істота Dialogue: 0,0:06:24.90,0:06:28.21,Default,,0000,0000,0000,,І ми зробили два об'єкти, які поширюються\Nвід цього основного об'єкта. Dialogue: 0,0:06:28.21,0:06:30.98,Default,,0000,0000,0000,,Вони успадкували деякі функціональні \Nможливості але і додали свої власні. Dialogue: 0,0:06:32.01,0:06:36.34,Default,,0000,0000,0000,,І здорово, те що ми можемо змінити \Nзагальну функціональність в одному місці. Dialogue: 0,0:06:36.34,0:06:40.30,Default,,0000,0000,0000,,Наприклад якби ми хотіли змінити вік знову\Nми могли б ввести плюс років [+ yrs old] Dialogue: 0,0:06:41.25,0:06:43.48,Default,,0000,0000,0000,,Тепер у кожного є "роки" в кінці. Dialogue: 0,0:06:43.91,0:06:50.68,Default,,0000,0000,0000,,Або ми могли б змінити функції "talk" і \Nбуде як "Вау". А тепер обидва Вінстони та Dialogue: 0,0:06:50.68,0:06:52.39,Default,,0000,0000,0000,,Хоппери кажуть "Суп" Dialogue: 0,0:06:52.98,0:06:56.80,Default,,0000,0000,0000,,Так що тепер, ви побачили, як створювати \Nтипи об'єктів і успадковування від них Dialogue: 0,0:06:56.80,0:06:58.64,Default,,0000,0000,0000,,ви можете почати думати про те, як це \Nмогло б бути корисним у ваших Dialogue: 0,0:06:58.64,0:07:01.35,Default,,0000,0000,0000,,малюках, анімацій, моделюванні та іграх. Dialogue: 0,0:07:01.35,0:07:04.81,Default,,0000,0000,0000,,Наприклад, може бути, у вас є гра, і у вас\Nє багато типів героїв в ньому Dialogue: 0,0:07:04.81,0:07:07.68,Default,,0000,0000,0000,,і всі вони можуть бігти, але тільки деякі \Nз них можуть стрибати. Dialogue: 0,0:07:07.68,0:07:11.97,Default,,0000,0000,0000,,Це ідеальне місце, від деяких типів\Nоб'єктів і деякого успадковування. Dialogue: 0,0:07:11.97,0:07:14.81,Default,,0000,0000,0000,,Але я впевнена, ви можете придумати безліч\Nбільше способів також.