-
В попередньому обговоренні, ми дізналися,
про те як зробити тип об'єкта для подання
-
наших двох Вінстонів як об'єктів
-
а потім встановили їх з конструкторами.
-
Тепер, тип об'єкта не тільки повинен бути
пов'язаним з властивостями
-
Це також може пов'язуватись з
функціональністю. Подумайте про світ і всі
-
типи об'єктів в ньому
-
як про нас, людей. У всіх нас є рісті вік,
але є те, що ми можемо робити, це спати,
-
смачно поїсти, і програмувати.
-
І ми хочемо бути в змозі зв'язати ці
функції з тими типами об'єктів.
-
У цій програмі, де ми зупинилися минулого
разу, ми маємо функцію тут,
-
drawWinston, що ми викликаємо по обох
об'єктах Вінстон. Чи Не було б здорово,
-
якщо б ми могли просто прикріпити це
-
до типу об'єкта Вінстон. Ну ми можемо, і
це легко зробити.
-
Тому, під нашим конструктором, ми введемо
Winston.prototype велика W
-
і prototype, це нове слово, яке ви,
ймовірно, не бачили
-
І прототип це властивість об'єкта,
до якого ми можемо приєднати функції
-
і це буде означати, що кожен об'єкт, який
є екземпляром, матиме ці функції.
-
Отже, ми можемо ввести ".prototype.", а
потім ім'я функції, тому ми вводимо "draw"
-
рівне, і тоді ми можемо взяти наш
drawWinston код і ми можемо покласти його
-
перемістити його всередину сюди. Добре так
що тепер, що ми додали функцію draw
-
до нашого Winston prototype. А це значить,
ми повинні бути в змозі викликати draw()
-
будь-якого типу об'єкта Вінстон
-
Гаразд, отже, ми повинні бути в змозі
викликати draw () по
-
winstonTeen або winstonAdult.
-
І коли у нас є функція, як ця, то
ми можемо викликате по об'єкті,
-
ми фактично називаємо це "метод" так що ви
можете чути як я кажу "метод"зараз.
-
Гаразд, скажемо це " метод відображення"
Гаразд.
-
Отже, тепер ми видалимо це, і ось це і
тепер побачимо чи ми можемо викликати
-
draw() winstonTeen.draw()
-
Гаразд. У нас помилка, що стирчить тут, і
вона говорить: "winstObject не визначений"
-
І перш ніж, ми пропустимо цей аргумент
в drawWinston, що був об'єктом Вінстон
-
але тепер ми не пропускаємо його отже, ми
могли б змінити це, щоб пропускати.
-
а тоді, ми подивимося, чи проходимите тут?
Ми слід би пропустити winstonTeen. Гаразд.
-
Спрацювало, але це, здається, теж не дуже
розумно. Я і так вже викликаю draw на
-
самому об'єкті.
-
Це не повинно пройти в об'єкті також.
Це здається зайвим.
-
І це правда, ми не повинні робити це, так
що видалимо це тут, а тепер подумаємо.
-
Якщо ми всередині об'єкту, що використати
щоб мати доступ до властивостей об'єкту?
-
ви можете поглянути на наш конструктор і
пам'ятаєте спеціальне ключове слово "this"
-
"А, якщо ми просто змінимо це, на ось це!
Отже, ми міняємо winstObject на "this".
-
Так як ми знаходимося всередині об'єкту
прямо зараз. Ця функція обраховується
-
відповідно об'єкту, отже, "this"
відноситиметься до цього поточного об'єкту
-
І так, спосіб, яким ми можемо просто
сказати: "this", і ми отримаємо доступ до
-
всіх властивостей цього поточного об'єкту
-
І це повністю працює, бачите? Чи не круто?
І тепер можемо ввести WinstonAdult.draw()
-
І це матиме доступ до властивостей winston
Adult так як це об'єкт, що виклкається.
-
Ось це дійсно здорово про "This" ключове
слово, хоча це іноді заплутує коли говориш
-
Добре, що ж було весело, тому додамо ще
один метод. І що ще може робити Вінстон?
-
Можливо він розкаже. Тому, зробимо Winston
.prototype.talk тому, ми можемо додати
-
стільки методів скільки хочем до прототипу
-
Так що ми скажемо: "Я Вінстон!"
-
І тоді ми просто введемо this.x+20,і
this.y+150.
-
А в результаті, нічого не сталося, але,
звичайно, це тому, що я ще не
-
викликаю цю функцію.
-
Отже, зробимо щоб підліток говорив
winstonTeen.talk() [нерозбірливо] говорить
-
весь час, гаразд.
-
Я Вінстон. А потім winstonAdult.talk ()
-
Добре, тепер маємо цей тип об'єкту Вінстон
що має властивості: прізвисько,
-
вік, х, у; і він має функціональності:
способи, методи; які діють по-різному
-
в залежності від властивостей
-
і ми можемо створити стільки екземплярів
Вінстона, скільки ми хочемо, і викликати
-
за одним з цих методів на ньому.
-
Досить круто, так?