עכשיו שאתם מבינים את היסודות של Javascript, אני רוצה ללמד אתכם דרך מגניבה להשתמש ב-Javascript משהו שנקרא "תכנות-מונחה-עצמים" (OOP - "object-oriented programming") אבל קודם אנחנו צריכים להבין למה זה שימושי אז יצרתי תוכנה שתהיה טובה יותר ברגע שנשתמש בתכנות מונחה עצמים זו תוכנית די מגניבה מלכתחילה. למעלה, יש לי שני משתנים ששומרים אובייקטים פשוטים (object literal) בתוכם object literal זה סוג של אובייקט שכבר למדנו עליו, שאנו יוצרים עם שימוש בסוגריים מסולסלים ובתוכם אנו שמים את שמות המאפיינים והערכים שלהם. אז יש לנו שני משתנים שהם אובייקטים, וכאן למטה יש את הפונקציה drawWinston שמצפה לפרמטר יחיד ואז הפונקציה מציירת את הפרמטר שהועבר - היא מציירת תמונה המבוססת על מאפייני ה-X וה-Y של האובייקט וכותרת שמבוססת על מאפייני הגיל והכינוי שלו. וכאן בסוף למטה, אנחנו קוראים ל-drawWinston על שני האובייקטים, teen ו-adult, וזה מה שגורם להדפסות להופיע. נחמד. אם נסתכל כאן על האובייקטים, שימו לב שהם ממש דומים אחד לשני. לשניהם יש את אותם סוגי מאפיינים, ושניהם יכולים להיות מועברים לפונקציה drawWinston למעשה, אם תחשבו על זה, הם שניהם מתארים סוג של ווינסטון נוכל לחשוב שיש מעין סוג של ווינסטון מופשט בעולם ולכל ווינסטון יש את אותו סט של מאפיינים, כמו כינוי וגיל, ומיקום X ו-Y מה שעשינו כאן, זה יצרנו שני מופעים של ווינסטון כך שכל אחד מתאר ווינסטון ספציפי. אחד מהם הוא ווינסטון מתבגר, והשני הוא ווינסטון בוגר. אבל שניהם מאוד דומים, יש להם הרבה מאפיינים דומים. אם תחשבו על זה, הרבה דברים בעולם עובדים בצורה כזאת, שיש לנו סוגי מידע מופשטים כמו בני אדם או אנשים וכולנו פשוט מופעים ספציפיים של הסוג המופשט, עם המאפיינים הייחודיים שלנו. אנחנו יכולים להשתמש בשיטות של תכנות מונחה עצמים ב-Javascript, כך שמשתני ווינסטון האלו יהיו ממש מופעים של אובייקט ווינסטון מופשט, כך שהם ידעו שיש להם מאפיינים משותפים. כדי לעשות זאת, דבר ראשון עלינו לתאר את הטיפוס המופשט הזה של ווינסטון נעשה זאת על ידי כך שניצור משתנה נשמור את הטיפוס הזה בתוך משתנה. נרשום: var Winston, עם אות W גדולה - נרצה תמיד להתחיל את שמות טיפוסי האובייקטים שלנו עם אות גדולה - ונרשום שזה שווה לפונקציה. הפונקציה זו היא פונקציה מיוחדת שנקראת פונקציית בנאי (constructor) כי זה מה שהולך להיקרא כל פעם שנרצה ליצור מופע חדש של ווינסטון. אז אנחנו רוצים ליצור את teenageWinston, אז נקרא לפונקציה הזו, ואם נרצה ליצור adultWinston, גם אז נקרא לפונקציה הזו. זה אומר שהפונקציה הזו צריכה לקבל את הפרמטרים שהיא צריכה לדעת עליהם בשביל ליצור אובייקט ווינסטון שלם במקרה הזה, היא צריכה לדעת כינוי, גיל, מיקום X, ומיקום Y. אחרי שקיבלנו את הפרמטרים האלו אנחנו צריכים לעשות איתם משהו אז אנחנו צריכים לחבר את המידע הזה לאובייקט של ווינסטון. אז נשתמש במילה חדשה בשפה - "this". המילה this מתייחסת למופע הנוכחי של האובייקט. אז נרשום this.nickname, כלומר מאפיין הכינוי של האובייקט הזה שווה למה שמעובר לפונקציית הבנאי, אוקיי? ו-this.age שווה לגיל שמועבר, this.x שווה ל-x שמועבר, ו-this.y שווה ל-y שמועבר. אז עכשיו יש לנו את הטיפוס המופשט שנקרא ווינסטון, ויש לו פונקציית בנאי שאנחנו יכולים להשתמש בה כדי ליצור ווינסטון חדש. בואו ננסה להשתמש בה! ניצור את winstonTeen שוב, אבל הפעם נרשום winstonTeen שווה ובמקום סוגריים מסולסלים נרשום new Winston מה שאומר שאנחנו מנסים ליצור מופע חדש של ווינסטון ואז נעביר את המידע שצריך - "Winsteen", 15, 20, 50, אוקיי? ועכשיו נוכל למחוק את הקוד הישן כי אנחנו לא צריכים אותו יותר. בסדר? זה יצר ווינסטון חדש בשם Winsteen. ונוכל לרשום גם winstonAdult = new Winston והכינוי שלו יהיה "Mr. Winst-a-lot" והוא בן 30, והמיקום שלו הוא 229, 50. בסדר? ואז נוכל למחוק את האובייקט הפשוט טה-דה! הקוד שלנו עדיין עובד. מה שעשינו כאן זה לומר שיש סוג של אובייקט מופשט, סוג של מידע, שהוא Winston ואנחנו יכולים ליצור מופעים חדשים של ווינסטון שיש להם מאפיינים ייחודיים להם אנחנו זוכרים את ערכי המאפיינים האלו בתוכם ולזכור זה ממש חשוב. כאן בפנים, יש לנו את this.nickname, this.age אם בטעות לא היינו שומרים משהו ב-this.age, עכשיו זה אומר שזה "undefined" (לא מוגדר) זה כי כאן למטה, הפונקציה drawWinston מצפה שלאובייקט שמועבר אליה יהיה מאפיין age ואם לא היינו יוצרים את this.age אז אין לו מאפיין גיל, נכון? העברנו את הגיל לפונקציית הבנאי אבל אז לא עשינו איתו כלום, אנחנו צריכים לחבר את הגיל לאובייקט באמצעות המילה this. נחזיר את השורה הזאת. אולי אתם חושבים, יופי, הקוד עכשיו עובד, וכתבת קוד יפה אבל, בסופו של דבר כל מה שעשינו זה להשיג את מה שהיה לנו קודם אבל הנה הדבר המגניב. כל הWinstonים שלנו עוברים דרך אותה פונקציית בנאי אז אם נרצה, אנחנו יכולים לשנות דברים, לשנות משהו לגבי ווינסטון כל הווינסטונים, עם שינוי רק פה. אז למשל גיל, אם נרצה לרשום פה "yrs old" נוכל פשוט לשים את זה כאן, ועכשיו בכל הווינסטונים שלנו יהיה רשום "15 yrs old" או "30 yrs old", נכון? אז לוקחים את החלק שמיוחד בכל אחד מהם, אבל אז יש להם גם דברים משותפים וזה דבר ממש מגניב לגבי תכנות מונחה עצמים, הרעיון שיש סוגי אובייקטים בעולם, ואפשר ליצור מופעים של האובייקטים האלו ושישנם דברים דומים, משותפים לכולם, כמו שלכולם יש את אותם מאפיינים וישנם דברים שונים - הערך של המאפיין הזה שונה מהערך של המאפיין הזה אצל המופע השני אנחנו יכולים לבצע עם המופעים האלו את אותם התנהגויות, לקרוא לאותם פונקציות איתם ולהתשמש בהם בצורה דומה. אז זה כמה מהדברים המגניבים לגבי תכנות מונחה עצמים אבל כפי שתראו, יש גם עוד המון אחרים. הישארנו עימנו!