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