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