0:00:00.780,0:00:06.234 בפעם האחרונה, למדנו איך ליצור טיפוס אובייקט כדי לייצג את שני האובייקטים דמויי-ווינסטון שלנו 0:00:06.234,0:00:09.234 ואז לאתחל אותם עם בנאי (constructor). 0:00:09.234,0:00:13.472 טיפוס אובייקט לא חייב להיות מקושר רק עם מאפיינים. 0:00:13.472,0:00:18.806 הוא יכול להיות מקושר גם עם פונקציונליות. תחשבו על העולם וכל טיפוסי האובייקטים בעולם 0:00:18.806,0:00:26.287 כמונו, בני האדם. לכולנו יש גובה וגיל, אבל יש לנו גם דברים שאנחנו יכולים לעשות, כמו לישון, לאכול, ולתכנת. 0:00:26.287,0:00:30.939 ואנחנו רוצים להיות מסוגלים לקשר את הפונקציות האלו עם טיפוסי האובייקטים האלו. 0:00:30.939,0:00:35.949 בתוכנית הזאת, שהיא בדיוק כמו שהשארנו אותה בפעם שעברה, יש לנו את הפונקציה 0:00:35.949,0:00:43.066 drawWinston, שאנחנו יכולים לקרוא לה עם שני אובייקטי ווינסטון. אבל זה היה יותר נחמד אם היינו יכולים פשוט לחבר 0:00:43.066,0:00:48.569 את זה לטיפוס של אובייקט ווינסטון. אנחנו יכולים, וזה די קל לעשות זאת. 0:00:48.569,0:00:55.725 אז מתחת לבנאי, אנחנו נכתוב Winston - עם אות W גדולה - נקודה prototype, 0:00:55.725,0:00:59.232 אב הטיפוס (prototype), זאת מילה חדשה שכנראה לא ראיתם קודם. 0:00:59.232,0:01:05.881 אב הטיפוס הוא מאפיין של האובייקט שאנחנו יכולים לצרף לו פונקציות 0:01:05.881,0:01:13.309 וזה אומר שלכל אובייקט שהוא מופע של הטיפוס יהיו את הפונקציות האלו. 0:01:13.309,0:01:19.612 אז נוכל לרשום נקודה, prototype, ואז נקודה, ואז את שם הפונקציה, draw 0:01:19.612,0:01:25.606 ונרשום שווה, ואז נוכל לקחת את הקוד של פונקציית הציור שלנו ולשים אותו 0:01:25.606,0:01:32.951 כאן. אז מה שעשינו עכשיו, זה לחבר את פונקציית הציור 0:01:32.951,0:01:40.008 לאב הטיפוס של ווינסטון. וזה אומר שאנחנו אמורים להיות מסוגלים לקרוא ל-draw על כל אובייקט מסוג ווינסטון. 0:01:40.008,0:01:45.411 אז זה יהיה אפשרי לקרוא ל-draw על האובייקטים winstonTeen ו-winstonAdult. 0:01:45.411,0:01:49.569 וכשיש לנו פונקציה כזאת, שאנו יכולים לקרוא לה על אובייקט 0:01:49.569,0:01:54.833 אנו קוראים לזה "מתודה", אז מעתה אשתמש גם במילה "מתודה". 0:01:54.833,0:01:58.272 אז נאמר שזו "מתודת הציור". אוקיי. 0:01:58.272,0:02:04.103 אז עכשיו נמחק את כל זה, ונראה אם אנחנו יכולים לקרוא ל-draw? 0:02:04.103,0:02:07.069 winstonTeen.draw() 0:02:07.069,0:02:13.697 אוקיי. יש לנו שגיאה, ראינו אותה קופצת כאן, וכתוב: "winstObject is not defined" (האובייקט winstObject לא מוגדר). 0:02:13.697,0:02:20.530 אוקיי. קודם, היינו מעבירים את הפרמטר הזה, האובייקט ווינסטון, לפונקציה drawWinston 0:02:20.530,0:02:26.462 אבל עכשיו אנחנו לא מעבירים אותו יותר. אז אנחנו יכולים להעביר אותו 0:02:26.462,0:02:30.819 ומה אנחנו אמורים להעביר פה? נרצה להעביר את winstonTeen. אוקיי. 0:02:30.819,0:02:38.441 זה עבד, אבל זה גם נראה ממש טיפשי. אני כבר קוראת לפונקצית draw על האובייקט עצמו. 0:02:38.441,0:02:43.965 לא הגיוני שאצטרך להעביר את האובייקט כפרמטר בנוסף, זה נראה מיותר 0:02:43.965,0:02:48.465 זה נכון, אנחנו לא צריכים לעשות את זה, אז בואו נמחק את זה, ונחשוב רגע. 0:02:48.465,0:02:54.404 אם אנחנו בתוך האובייקט, במה נוכל להשתמש כדי לגשת למאפיינים של האובייקט? 0:02:54.404,0:03:00.374 אם תסתכלו על הבנאי (constructor) שלנו, תיזכרו במילה המיוחדת this 0:03:00.374,0:03:08.573 מה אם פשוט נשנה את מה שכתוב כאן, ל-"this"! נחליף את winstObject ב-this. 0:03:08.573,0:03:12.951 כי עכשיו אנחנו בתוך האובייקט. הפונקציה הזאת מופעלת 0:03:12.951,0:03:16.861 על האובייקט, כך ש-this יתייחס לאובייקט הנוכחי. 0:03:16.861,0:03:23.271 אז אנו יכולים פשוט לרשום this ולגשת לכל המאפיינים של האובייקט הנוכחי. 0:03:23.271,0:03:26.720 וזה עובד, רואים? 0:03:26.720,0:03:31.907 אנחנו כותבים winstonAdult.draw() 0:03:31.907,0:03:38.271 טה-דה! זה ניגש למאפיינים של winstonAdult כי זה האובייקט שעליו קוראים לפונקציה 0:03:38.271,0:03:45.752 זה מה שממש מגניב במילה this, אפילו שזה יכול להיות קצת מבלבל לפעמים. 0:03:45.752,0:03:52.028 אוקיי, זה היה ממש כיף, אז בואו נוסיף עוד מתודה. מה עוד אפשר שווינסטון יעשה? 0:03:52.028,0:04:01.078 אולי נגרום לו לדבר. ניצור את Winston.prototype.talk. אנחנו יכולים לחבר כמה מתודות שנרצה לאב הטיפוס. 0:04:01.078,0:04:05.241 נכתוב: "I'm Winston!" (אני ווינסטון) 0:04:05.241,0:04:13.181 ואז נרשום כאן this.x+20 ו-this.y+150. 0:04:13.181,0:04:19.734 וכמובן, לא קרה שום דבר, כי לא קראנו עדיין לפונקיה הזו. 0:04:19.734,0:04:25.068 אז בואו נגרום לו לדבר. winstonTeen.talk() 0:04:25.068,0:04:30.479 והופיעו המילים "אני ווינסטון"! ואם נקרא גם ל-winstonAdult.talk() 0:04:30.479,0:04:36.828 טה-דה! אוקיי, עכשיו יש לנו טיפוס אובייקט Winston שיש לו מאפיינים: כינוי, גיל, מיקום X, מיקום Y 0:04:36.828,0:04:45.026 ויש לו גם פונקציונליות - התנהגויות, מתודות - שמתנהגות בצורה שונה בתלות במאפיינים 0:04:45.026,0:04:50.999 ואנחנו יכולים ליצור כמה מופעים שנרצה של Winston ולקרוא לכל המתודות האלו. 0:04:50.999,0:04:54.000 מגניב, לא?