1 00:00:00,250 --> 00:00:04,214 В попередньому обговоренні, ми дізналися, про те як зробити тип об'єкта для подання 2 00:00:04,214 --> 00:00:06,234 наших двох Вінстонів як об'єктів 3 00:00:06,234 --> 00:00:09,234 а потім встановили їх з конструкторами. 4 00:00:09,234 --> 00:00:13,472 Тепер, тип об'єкта не тільки повинен бути пов'язаним з властивостями 5 00:00:13,472 --> 00:00:17,466 Це також може пов'язуватись з функціональністю. Подумайте про світ і всі 6 00:00:17,466 --> 00:00:18,806 типи об'єктів в ньому 7 00:00:18,806 --> 00:00:24,007 як про нас, людей. У всіх нас є рісті вік, але є те, що ми можемо робити, це спати, 8 00:00:24,007 --> 00:00:26,287 смачно поїсти, і програмувати. 9 00:00:26,287 --> 00:00:30,939 І ми хочемо бути в змозі зв'язати ці функції з тими типами об'єктів. 10 00:00:30,939 --> 00:00:35,949 У цій програмі, де ми зупинилися минулого разу, ми маємо функцію тут, 11 00:00:35,949 --> 00:00:41,246 drawWinston, що ми викликаємо по обох об'єктах Вінстон. Чи Не було б здорово, 12 00:00:41,246 --> 00:00:43,066 якщо б ми могли просто прикріпити це 13 00:00:43,066 --> 00:00:48,569 до типу об'єкта Вінстон. Ну ми можемо, і це легко зробити. 14 00:00:48,569 --> 00:00:55,725 Тому, під нашим конструктором, ми введемо Winston.prototype велика W 15 00:00:55,725 --> 00:00:59,232 і prototype, це нове слово, яке ви, ймовірно, не бачили 16 00:00:59,232 --> 00:01:05,881 І прототип це властивість об'єкта, до якого ми можемо приєднати функції 17 00:01:05,881 --> 00:01:13,309 і це буде означати, що кожен об'єкт, який є екземпляром, матиме ці функції. 18 00:01:13,309 --> 00:01:19,612 Отже, ми можемо ввести ".prototype.", а потім ім'я функції, тому ми вводимо "draw" 19 00:01:19,612 --> 00:01:25,606 рівне, і тоді ми можемо взяти наш drawWinston код і ми можемо покласти його 20 00:01:25,606 --> 00:01:32,951 перемістити його всередину сюди. Добре так що тепер, що ми додали функцію draw 21 00:01:32,951 --> 00:01:37,008 до нашого Winston prototype. А це значить, ми повинні бути в змозі викликати draw() 22 00:01:37,008 --> 00:01:40,008 будь-якого типу об'єкта Вінстон 23 00:01:40,008 --> 00:01:42,411 Гаразд, отже, ми повинні бути в змозі викликати draw () по 24 00:01:42,411 --> 00:01:45,411 winstonTeen або winstonAdult. 25 00:01:45,411 --> 00:01:49,569 І коли у нас є функція, як ця, то ми можемо викликате по об'єкті, 26 00:01:49,569 --> 00:01:53,283 ми фактично називаємо це "метод" так що ви можете чути як я кажу "метод"зараз. 27 00:01:54,153 --> 00:01:58,013 Гаразд, скажемо це " метод відображення" Гаразд. 28 00:01:58,013 --> 00:02:03,363 Отже, тепер ми видалимо це, і ось це і тепер побачимо чи ми можемо викликати 29 00:02:03,363 --> 00:02:07,069 draw() winstonTeen.draw() 30 00:02:07,069 --> 00:02:13,697 Гаразд. У нас помилка, що стирчить тут, і вона говорить: "winstObject не визначений" 31 00:02:13,697 --> 00:02:20,530 І перш ніж, ми пропустимо цей аргумент в drawWinston, що був об'єктом Вінстон 32 00:02:20,530 --> 00:02:26,462 але тепер ми не пропускаємо його отже, ми могли б змінити це, щоб пропускати. 33 00:02:26,462 --> 00:02:30,819 а тоді, ми подивимося, чи проходимите тут? Ми слід би пропустити winstonTeen. Гаразд. 34 00:02:30,819 --> 00:02:36,551 Спрацювало, але це, здається, теж не дуже розумно. Я і так вже викликаю draw на 35 00:02:36,551 --> 00:02:38,441 самому об'єкті. 36 00:02:38,441 --> 00:02:43,965 Це не повинно пройти в об'єкті також. Це здається зайвим. 37 00:02:43,965 --> 00:02:48,465 І це правда, ми не повинні робити це, так що видалимо це тут, а тепер подумаємо. 38 00:02:48,465 --> 00:02:54,404 Якщо ми всередині об'єкту, що використати щоб мати доступ до властивостей об'єкту? 39 00:02:54,404 --> 00:03:00,374 ви можете поглянути на наш конструктор і пам'ятаєте спеціальне ключове слово "this" 40 00:03:00,374 --> 00:03:08,573 "А, якщо ми просто змінимо це, на ось це! Отже, ми міняємо winstObject на "this". 41 00:03:08,573 --> 00:03:12,651 Так як ми знаходимося всередині об'єкту прямо зараз. Ця функція обраховується 42 00:03:12,651 --> 00:03:16,441 відповідно об'єкту, отже, "this" відноситиметься до цього поточного об'єкту 43 00:03:16,441 --> 00:03:20,271 І так, спосіб, яким ми можемо просто сказати: "this", і ми отримаємо доступ до 44 00:03:20,271 --> 00:03:23,271 всіх властивостей цього поточного об'єкту 45 00:03:23,271 --> 00:03:31,180 І це повністю працює, бачите? Чи не круто? І тепер можемо ввести WinstonAdult.draw() 46 00:03:31,907 --> 00:03:38,271 І це матиме доступ до властивостей winston Adult так як це об'єкт, що виклкається. 47 00:03:38,271 --> 00:03:43,802 Ось це дійсно здорово про "This" ключове слово, хоча це іноді заплутує коли говориш 48 00:03:45,752 --> 00:03:52,028 Добре, що ж було весело, тому додамо ще один метод. І що ще може робити Вінстон? 49 00:03:52,028 --> 00:03:57,508 Можливо він розкаже. Тому, зробимо Winston .prototype.talk тому, ми можемо додати 50 00:03:57,508 --> 00:04:01,078 стільки методів скільки хочем до прототипу 51 00:04:01,078 --> 00:04:05,241 Так що ми скажемо: "Я Вінстон!" 52 00:04:05,241 --> 00:04:13,181 І тоді ми просто введемо this.x+20,і this.y+150. 53 00:04:13,181 --> 00:04:16,734 А в результаті, нічого не сталося, але, звичайно, це тому, що я ще не 54 00:04:16,734 --> 00:04:19,734 викликаю цю функцію. 55 00:04:19,734 --> 00:04:23,548 Отже, зробимо щоб підліток говорив winstonTeen.talk() [нерозбірливо] говорить 56 00:04:23,548 --> 00:04:25,068 весь час, гаразд. 57 00:04:25,068 --> 00:04:30,479 Я Вінстон. А потім winstonAdult.talk () 58 00:04:30,479 --> 00:04:36,828 Добре, тепер маємо цей тип об'єкту Вінстон що має властивості: прізвисько, 59 00:04:36,828 --> 00:04:42,026 вік, х, у; і він має функціональності: способи, методи; які діють по-різному 60 00:04:42,026 --> 00:04:45,026 в залежності від властивостей 61 00:04:45,026 --> 00:04:47,999 і ми можемо створити стільки екземплярів Вінстона, скільки ми хочемо, і викликати 62 00:04:47,999 --> 00:04:50,389 за одним з цих методів на ньому. 63 00:04:50,759 --> 00:04:52,829 Досить круто, так?