WEBVTT 00:00:00.250 --> 00:00:04.214 В попередньому обговоренні, ми дізналися, про те як зробити тип об'єкта для подання 00:00:04.214 --> 00:00:06.234 наших двох Вінстонів як об'єктів 00:00:06.234 --> 00:00:09.234 а потім встановили їх з конструкторами. 00:00:09.234 --> 00:00:13.472 Тепер, тип об'єкта не тільки повинен бути пов'язаним з властивостями 00:00:13.472 --> 00:00:17.466 Це також може пов'язуватись з функціональністю. Подумайте про світ і всі 00:00:17.466 --> 00:00:18.806 типи об'єктів в ньому 00:00:18.806 --> 00:00:24.007 як про нас, людей. У всіх нас є рісті вік, але є те, що ми можемо робити, це спати, 00:00:24.007 --> 00:00:26.287 смачно поїсти, і програмувати. 00:00:26.287 --> 00:00:30.939 І ми хочемо бути в змозі зв'язати ці функції з тими типами об'єктів. 00:00:30.939 --> 00:00:35.949 У цій програмі, де ми зупинилися минулого разу, ми маємо функцію тут, 00:00:35.949 --> 00:00:41.246 drawWinston, що ми викликаємо по обох об'єктах Вінстон. Чи Не було б здорово, 00:00:41.246 --> 00:00:43.066 якщо б ми могли просто прикріпити це 00:00:43.066 --> 00:00:48.569 до типу об'єкта Вінстон. Ну ми можемо, і це легко зробити. 00:00:48.569 --> 00:00:55.725 Тому, під нашим конструктором, ми введемо Winston.prototype велика W 00:00:55.725 --> 00:00:59.232 і prototype, це нове слово, яке ви, ймовірно, не бачили 00:00:59.232 --> 00:01:05.881 І прототип це властивість об'єкта, до якого ми можемо приєднати функції 00:01:05.881 --> 00:01:13.309 і це буде означати, що кожен об'єкт, який є екземпляром, матиме ці функції. 00:01:13.309 --> 00:01:19.612 Отже, ми можемо ввести ".prototype.", а потім ім'я функції, тому ми вводимо "draw" 00:01:19.612 --> 00:01:25.606 рівне, і тоді ми можемо взяти наш drawWinston код і ми можемо покласти його 00:01:25.606 --> 00:01:32.951 перемістити його всередину сюди. Добре так що тепер, що ми додали функцію draw 00:01:32.951 --> 00:01:37.008 до нашого Winston prototype. А це значить, ми повинні бути в змозі викликати draw() 00:01:37.008 --> 00:01:40.008 будь-якого типу об'єкта Вінстон 00:01:40.008 --> 00:01:42.411 Гаразд, отже, ми повинні бути в змозі викликати draw () по 00:01:42.411 --> 00:01:45.411 winstonTeen або winstonAdult. 00:01:45.411 --> 00:01:49.569 І коли у нас є функція, як ця, то ми можемо викликате по об'єкті, 00:01:49.569 --> 00:01:53.283 ми фактично називаємо це "метод" так що ви можете чути як я кажу "метод"зараз. 00:01:54.153 --> 00:01:58.013 Гаразд, скажемо це " метод відображення" Гаразд. 00:01:58.013 --> 00:02:03.363 Отже, тепер ми видалимо це, і ось це і тепер побачимо чи ми можемо викликати 00:02:03.363 --> 00:02:07.069 draw() winstonTeen.draw() 00:02:07.069 --> 00:02:13.697 Гаразд. У нас помилка, що стирчить тут, і вона говорить: "winstObject не визначений" 00:02:13.697 --> 00:02:20.530 І перш ніж, ми пропустимо цей аргумент в drawWinston, що був об'єктом Вінстон 00:02:20.530 --> 00:02:26.462 але тепер ми не пропускаємо його отже, ми могли б змінити це, щоб пропускати. 00:02:26.462 --> 00:02:30.819 а тоді, ми подивимося, чи проходимите тут? Ми слід би пропустити winstonTeen. Гаразд. 00:02:30.819 --> 00:02:36.551 Спрацювало, але це, здається, теж не дуже розумно. Я і так вже викликаю draw на 00:02:36.551 --> 00:02:38.441 самому об'єкті. 00:02:38.441 --> 00:02:43.965 Це не повинно пройти в об'єкті також. Це здається зайвим. 00:02:43.965 --> 00:02:48.465 І це правда, ми не повинні робити це, так що видалимо це тут, а тепер подумаємо. 00:02:48.465 --> 00:02:54.404 Якщо ми всередині об'єкту, що використати щоб мати доступ до властивостей об'єкту? 00:02:54.404 --> 00:03:00.374 ви можете поглянути на наш конструктор і пам'ятаєте спеціальне ключове слово "this" 00:03:00.374 --> 00:03:08.573 "А, якщо ми просто змінимо це, на ось це! Отже, ми міняємо winstObject на "this". 00:03:08.573 --> 00:03:12.651 Так як ми знаходимося всередині об'єкту прямо зараз. Ця функція обраховується 00:03:12.651 --> 00:03:16.441 відповідно об'єкту, отже, "this" відноситиметься до цього поточного об'єкту 00:03:16.441 --> 00:03:20.271 І так, спосіб, яким ми можемо просто сказати: "this", і ми отримаємо доступ до 00:03:20.271 --> 00:03:23.271 всіх властивостей цього поточного об'єкту 00:03:23.271 --> 00:03:31.180 І це повністю працює, бачите? Чи не круто? І тепер можемо ввести WinstonAdult.draw() 00:03:31.907 --> 00:03:38.271 І це матиме доступ до властивостей winston Adult так як це об'єкт, що виклкається. 00:03:38.271 --> 00:03:43.802 Ось це дійсно здорово про "This" ключове слово, хоча це іноді заплутує коли говориш 00:03:45.752 --> 00:03:52.028 Добре, що ж було весело, тому додамо ще один метод. І що ще може робити Вінстон? 00:03:52.028 --> 00:03:57.508 Можливо він розкаже. Тому, зробимо Winston .prototype.talk тому, ми можемо додати 00:03:57.508 --> 00:04:01.078 стільки методів скільки хочем до прототипу 00:04:01.078 --> 00:04:05.241 Так що ми скажемо: "Я Вінстон!" 00:04:05.241 --> 00:04:13.181 І тоді ми просто введемо this.x+20,і this.y+150. 00:04:13.181 --> 00:04:16.734 А в результаті, нічого не сталося, але, звичайно, це тому, що я ще не 00:04:16.734 --> 00:04:19.734 викликаю цю функцію. 00:04:19.734 --> 00:04:23.548 Отже, зробимо щоб підліток говорив winstonTeen.talk() [нерозбірливо] говорить 00:04:23.548 --> 00:04:25.068 весь час, гаразд. 00:04:25.068 --> 00:04:30.479 Я Вінстон. А потім winstonAdult.talk () 00:04:30.479 --> 00:04:36.828 Добре, тепер маємо цей тип об'єкту Вінстон що має властивості: прізвисько, 00:04:36.828 --> 00:04:42.026 вік, х, у; і він має функціональності: способи, методи; які діють по-різному 00:04:42.026 --> 00:04:45.026 в залежності від властивостей 00:04:45.026 --> 00:04:47.999 і ми можемо створити стільки екземплярів Вінстона, скільки ми хочемо, і викликати 00:04:47.999 --> 00:04:50.389 за одним з цих методів на ньому. 00:04:50.759 --> 00:04:52.829 Досить круто, так?