0:00:01.187,0:00:03.173 חזרנו עם התוכנית שלנו שיוצרת ווינסטונים 0:00:03.173,0:00:07.589 אבל הוספתי טיפוס אובייקט חדש[br]שנקרא Hopper (הופר). 0:00:07.589,0:00:11.924 אני מגדירה את הופר באותו אופן[br]שהגדרתי את ווינסטון 0:00:11.924,0:00:15.843 התחלתי עם פונקציית בנאי, נתתי לו את אותם[br]המאפיינים ואת המתודה draw 0:00:15.843,0:00:20.498 והמתודה talk, ואז הוספתי עוד מתודה שנקראת 0:00:20.498,0:00:23.808 hooray (הידד), כי הופר אוהב לחגוג,[br]לעומת ווינסטון שלא אוהב את זה כלל. 0:00:23.808,0:00:27.924 בתחתית הפונקציה יצרתי שני אובייקטי הופר חדשים 0:00:27.924,0:00:31.174 שקראתי להם lilHopper ו- bigHopper 0:00:31.174,0:00:35.347 וציירתי אותם, וקראתי למתודה talk על אחד,[br]ולמתודה hooray על האחר 0:00:35.347,0:00:37.508 זה די מגניב 0:00:37.508,0:00:39.928 אם נסתכל על הקוד הזה כאן למעלה 0:00:39.928,0:00:41.823 אולי תשימו לב לדבר מעניין. 0:00:41.973,0:00:52.324 הקוד עבור Hopper הוא מאוד דומה לקוד[br]עבור Winston. בייחוד הסתכלו על הבנאי.[br]זהו אותו קוד כמו הבנאי של ווינסטון. 0:00:52.324,0:01:00.748 וגם הפונקציה talk היא בדיוק אותו קוד כמו[br]הפונקציה talk של ווינסטון. 0:01:00.763,0:01:03.897 ולשניהם יש פונקציית draw זהה 0:01:03.897,0:01:07.922 כך שיש הרבה דברים משותפים[br]לשני טיפוסי האובייקטים האלו 0:01:07.922,0:01:11.341 וזה הגיוני, כי אתם מבינים ש-Hopper[br]ו-Winston הם שני טיפוסי אובייקטים 0:01:11.341,0:01:15.299 דומים בעולם שלנו. אם תחשבו על העולם האמיתי 0:01:15.299,0:01:20.009 מחוץ למחשב, רוב טיפוסי האובייקטים חולקים 0:01:20.009,0:01:21.423 מאפיינים דומים עם טיפוסי אובייקטים אחרים. 0:01:21.423,0:01:23.643 כמו למשל בממלכת החי. כל החיות 0:01:23.643,0:01:26.812 דומות אחת לשניה בדרכים מסוימות.[br]ויש לנו סוגים שונים של חיות 0:01:26.812,0:01:31.588 כמו למשל בני אדם.[br]ולבני אדם יש דברים משותפים עם שאר עולם החי 0:01:31.588,0:01:34.331 אבל יש להם גם דברים שמשותפים[br]רק עם בני אדם אחרים. 0:01:34.331,0:01:35.820 אז נוכל לומר 0:01:36.205,0:01:38.967 שחיה היא טיפוס של אובייקט שהטיפוס[br]של בן אדם יורש ממנו פונקציונליות. 0:01:38.967,0:01:46.864 אנחנו לא מתחילים מאפס, אנו מוסיפים על[br]הפונקציונליות שירשנו מהיותנו בעלי חיים. 0:01:46.864,0:01:49.196 למשל, כל בעלי החיים משמיעים קולות 0:01:49.196,0:01:51.407 אבל בני אדם משתמשים בשפה. 0:01:51.407,0:01:54.673 הרעיון הזה של ירושה 0:01:54.673,0:01:56.695 הוא מאוד שימושי גם בתכנות. 0:01:56.695,0:01:59.865 אנו יוצרים שרשרת של ירושת אובייקטים[br]בקוד ה-Javascript שלנו. 0:01:59.865,0:02:02.529 כדי לעשות זאת תחשבו על 0:02:02.529,0:02:04.425 מה משותף לטיפוסי האובייקטים שלנו 0:02:04.425,0:02:06.633 נמציא לדבר המשותף שם 0:02:06.633,0:02:08.675 כי אנחנו הולכים ליצור טיפוס אובייקט חדש 0:02:08.675,0:02:10.576 שמייצג את אובייקט הבסיס. 0:02:10.576,0:02:12.094 הבה נקרא להם יצורים (creatures). 0:02:12.094,0:02:13.873 הם שניהם יצורים. 0:02:13.873,0:02:17.831 אז נאמר var Creature שווה..[br]ואז נרצה לשים את פונקציית הבנאי שלנו 0:02:17.831,0:02:22.342 אז בואו פשוט נגנוב את זאת של Hopper[br]כי היא זהה גם לזו של Winston. 0:02:22.342,0:02:23.762 אוקיי. 0:02:23.762,0:02:27.172 ואז, בואו נראה.. 0:02:27.172,0:02:28.135 עכשיו אנחנו רוצים.. 0:02:28.135,0:02:29.506 מה נרצה לעשות עכשיו? 0:02:29.506,0:02:31.966 אולי אנחנו רוצים להוסיף את הפונקציה[br]של דיבור (talk) 0:02:31.966,0:02:39.303 אז גם עבור מתודת talk נגנוב את של Hopper.[br]אבל כמובן נרצה שהיא תהיה חלק מהאב טיפוס[br]של היצור (creature) במקום. 0:02:39.303,0:02:41.683 אוקיי, יפה. 0:02:41.683,0:02:45.300 אז עכשיו יש לנו את טיפוס האובייקט של יצור. 0:02:45.300,0:02:47.810 אבל אנחנו צריכים לספר ל-Hopper שהוא צריך 0:02:47.810,0:02:51.141 לבסס את הפונקציונליות שלו על זו של Creature 0:02:51.248,0:02:51.249 נעשה זאת על ידי כך שנרשום את השורה הבאה 0:02:53.816,0:02:58.595 נרשום Hopper.prototype 0:02:58.595,0:03:01.967 שווה ל-Object.create 0:03:01.967,0:03:04.977 Creature.prototype 0:03:04.977,0:03:14.197 מה שהשורה הזו עושה הוא לספר ל-Javascript[br]שצריך לבסס את אב הטיפוס של Hopper,[br]כלומר את כל הפונקציונליות של Hopper,[br]על אב הטיפוס של Creature. 0:03:14.197,0:03:22.342 זה אומר שבכל פעם שהשפה תחפש פונקציה של[br]הופר, היא מחפשת קודם באב טיפוס של הופר, 0:03:22.342,0:03:26.429 אבל אחר כך, אם היא לא תמצא את הפונקציה[br]היא תחפש אותה באב טיפוס של Creature. 0:03:26.429,0:03:29.196 הרעיון הזה נקרא שרשרת אבות טיפוס[br](prototype chain) 0:03:29.196,0:03:34.032 עכשיו, ברגע שעשינו זאת, אנחנו יכולים למחוק 0:03:34.032,0:03:35.634 את המתודה talk מ-Hopper 0:03:35.634,0:03:38.302 כי היא כבר קיימת אצל Creature 0:03:38.302,0:03:40.231 שנמצא גבוה יותר בשרשרת אבות הטיפוס. 0:03:40.231,0:03:42.541 מוכנים? 0:03:42.541,0:03:43.924 זה עבד! 0:03:43.924,0:03:46.804 זה עובד, כי מצאנו את הפונקציה באב הטיפוס[br]של Creature במקום. 0:03:46.804,0:03:51.234 ננסה למחוק את הפונקציה הזו גם אצל ווינסטון. 0:03:51.234,0:03:57.680 אוקיי, זה לא עבד - אין לאובייקט מתודת talk. 0:03:57.680,0:04:01.263 מדוע? ובכן, יש לנו את הבנאי של ווינסטון 0:04:01.263,0:04:03.517 ואת המתודה draw, ומחקנו את talk. 0:04:03.517,0:04:07.924 שימו לב ששכחנו לספר גם לאב הטיפוס של ווינסטון 0:04:07.924,0:04:09.409 שעליו להתבסס על אב הטיפוס של יצור. 0:04:09.409,0:04:10.711 אז אנחנו צריכים את השורה החשובה הזו. 0:04:10.711,0:04:13.043 Winston.prototype שווה[br]ל- Object.create 0:04:13.043,0:04:15.194 ואז בסוגריים Creature.prototype 0:04:15.194,0:04:19.290 יפה! 0:04:19.290,0:04:20.426 שימו לב למשהו חשוב 0:04:20.426,0:04:26.097 שמתי את השורה הזו אחרי פונקציית הבנאי,[br]אבל לפני שאני מוסיפה כל דבר אחר 0:04:26.097,0:04:28.638 לאב הטיפוס של ווינסטון.[br]זה מה שבדרך כלל תרצו לעשות. 0:04:28.638,0:04:29.334 אתם רוצים 0:04:29.334,0:04:31.230 לספר לאובייקט מיד בהתחלה 0:04:31.230,0:04:33.860 שזהו אב הטיפוס הראשוני שעליו האב טיפוס[br]הנוכחי יהיה מבוסס 0:04:33.860,0:04:36.804 אבל אחר כך אנו מוסיפים עוד דברים לאב-טיפוס הזה 0:04:36.804,0:04:41.673 כי יכול להיות משהו שהוא ייחודי[br]ל-Winston או ייחודי ל-Hopper 0:04:41.673,0:04:43.909 שאין לאובייקטי Creature. 0:04:43.909,0:04:45.405 זה ממש מגניב שאתם יכולים להגדיר כאלו דברים. 0:04:45.405,0:04:50.256 אוקיי. אם תסתכלו על זה,[br]עדיין יש לנו קצת קוד שחוזר על עצמו 0:04:50.256,0:04:51.524 הקוד של הבנאי. 0:04:51.524,0:04:53.366 נכון? יש לנו אותו שלוש פעמים. 0:04:53.366,0:04:56.638 האם אנחנו יכולים פשוט למחוק אותו? 0:04:56.638,0:04:57.840 בואו ננסה. 0:04:57.840,0:05:03.509 אוקיי.. לא נראה שזה עבד 0:05:03.509,0:05:07.340 כי Hopper הופיע בפינה השמאלית העליונה,[br]כאילו הוא שכח את כל המאפיינים שלו 0:05:07.340,0:05:15.264 זה כיוון ששפת Javascript לא מניחה שאתם[br]רוצים את אותו בנאי, גם אם אתם רוצים לבסס[br]את האב-טיפוס עליו 0:05:15.264,0:05:19.359 כך שניתן להגדיר בנאי משלנו לאובייקטים האלו. 0:05:19.359,0:05:23.978 אבל יש גם דרך קלה לקרוא לבנאי של אובייקט אחר 0:05:23.978,0:05:28.926 נעשה זאת כך: 0:05:28.926,0:05:35.470 (Creature.call(this, nickname, age, x, y 0:05:35.470,0:05:40.598 ראיתם, זה עבד. מה שזה עושה 0:05:40.598,0:05:43.679 זה לקרוא לבנאי של Creature. 0:05:43.679,0:05:50.339 זה קורא לפונקציה הזו, וזה אומר לקוד לקרוא לבנאי 0:05:50.339,0:05:53.764 כאילו הוא נקרא ישירות בתוך אובייקט Hopper 0:05:53.764,0:05:56.968 וכאילו הוא נקרא עם הפרמטרים האלו 0:05:56.968,0:05:59.427 אלו הם הפרמטרים שאיתם קראו ל-Hopper. 0:05:59.427,0:06:03.589 וזה פשוט יבצע את הקוד הזה כאילו הוא היה כאן[br]בתוך הבנאי של האובייקט. 0:06:03.589,0:06:05.397 זה בדיוק מה שאנחנו רוצים, וזה עבד. 0:06:05.397,0:06:09.709 אנחנו יכולים 0:06:09.709,0:06:11.515 להעתיק את השורה הזאת גם לתוך 0:06:11.515,0:06:13.757 הבנאי של Winston. 0:06:13.757,0:06:16.531 וזה עובד. יופי! 0:06:16.531,0:06:24.901 אוקיי. תראו את זה. איחדנו את כל המאפיינים[br]המשותפים והפונקציונליות המשותפת לתוך[br]אובייקט בסיס יחיד, Creature 0:06:24.901,0:06:28.207 ויצרנו שני טיפוסי אובייקטים שמרחיבים[br]את אובייקט הבסיס. 0:06:28.207,0:06:30.981 הם יורשים פונקציונליות,[br]אבל הם גם מוסיפים דברים משלהם. 0:06:30.981,0:06:36.339 ומה שנחמד זה שאנחנו יכולים לשנות את[br]הפונקציונליות המשותפת במקום אחד. 0:06:36.339,0:06:40.302 למשל אם נרצה לשנות את הגיל כמו קודם,[br]נוכל לרשום '+' "yrs old" 0:06:40.302,0:06:43.908 עכשיו לכולם רשום "yrs old" אחרי הגיל שלהם. 0:06:43.908,0:06:49.871 או שאנחנו יכולים לשנות את המתודה talk, שיהיה כתוב "SUP" 0:06:49.871,0:06:57.174 ועכשיו כל ה-Winstonים וה-Hopperים[br]אומרים "SUP".[br]עכשיו כשראיתם איך ליצור[br]טיפוסי אובייקטים ואיך לרשת מטיפוסי אובייקטים 0:06:57.174,0:07:01.348 אתם יכולים להתחיל לחשוב על איך זה יכול להיות[br]שימושי בציורים, באנימציות, בסימולציות ובמשחקים. 0:07:01.348,0:07:05.257 לדוגמה, אולי יש לכם משחק ויש בו הרבה סוגי דמויות 0:07:05.257,0:07:07.683 וכולן יכולות לרוץ אבל רק חלקן יכולות לקפוץ 0:07:07.683,0:07:11.970 זהו מקום מושלם בשביל כמה טיפוסי אובייקטים[br]ושימוש בירושה. 0:07:11.970,0:07:15.970 אבל אני בטוחה שאתם יכולים לחשוב[br]על עוד הרבה שימושים אחרים.