[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.34,0:00:05.96,Default,,0000,0000,0000,,עכשיו שאתם מבינים את היסודות של Javascript, אני רוצה ללמד אתכם דרך מגניבה להשתמש ב-Javascript Dialogue: 0,0:00:05.96,0:00:09.55,Default,,0000,0000,0000,,משהו שנקרא "תכנות-מונחה-עצמים" (OOP - "object-oriented programming") Dialogue: 0,0:00:09.55,0:00:12.57,Default,,0000,0000,0000,,אבל קודם אנחנו צריכים להבין למה זה שימושי Dialogue: 0,0:00:12.57,0:00:17.67,Default,,0000,0000,0000,,אז יצרתי תוכנה שתהיה טובה יותר ברגע שנשתמש בתכנות מונחה עצמים Dialogue: 0,0:00:17.67,0:00:25.14,Default,,0000,0000,0000,,זו תוכנית די מגניבה מלכתחילה. למעלה, יש לי שני משתנים ששומרים אובייקטים פשוטים (object literal) בתוכם Dialogue: 0,0:00:25.14,0:00:30.45,Default,,0000,0000,0000,,object literal זה סוג של אובייקט שכבר למדנו עליו, שאנו יוצרים עם שימוש בסוגריים מסולסלים Dialogue: 0,0:00:30.45,0:00:34.41,Default,,0000,0000,0000,,ובתוכם אנו שמים את שמות המאפיינים והערכים שלהם. Dialogue: 0,0:00:34.41,0:00:39.24,Default,,0000,0000,0000,,אז יש לנו שני משתנים שהם אובייקטים, וכאן למטה יש את הפונקציה drawWinston Dialogue: 0,0:00:39.24,0:00:41.13,Default,,0000,0000,0000,,שמצפה לפרמטר יחיד Dialogue: 0,0:00:41.13,0:00:47.88,Default,,0000,0000,0000,,ואז הפונקציה מציירת את הפרמטר שהועבר - היא מציירת תמונה המבוססת על מאפייני ה-X וה-Y של האובייקט Dialogue: 0,0:00:47.88,0:00:53.11,Default,,0000,0000,0000,,וכותרת שמבוססת על מאפייני הגיל והכינוי שלו. Dialogue: 0,0:00:53.11,0:00:58.16,Default,,0000,0000,0000,,וכאן בסוף למטה, אנחנו קוראים ל-drawWinston על שני האובייקטים, teen ו-adult, Dialogue: 0,0:00:58.16,0:01:01.01,Default,,0000,0000,0000,,וזה מה שגורם להדפסות להופיע. Dialogue: 0,0:01:01.01,0:01:06.37,Default,,0000,0000,0000,,נחמד. אם נסתכל כאן על האובייקטים, Dialogue: 0,0:01:06.37,0:01:11.41,Default,,0000,0000,0000,,שימו לב שהם ממש דומים אחד לשני. Dialogue: 0,0:01:11.41,0:01:17.84,Default,,0000,0000,0000,,לשניהם יש את אותם סוגי מאפיינים, ושניהם יכולים להיות מועברים לפונקציה drawWinston Dialogue: 0,0:01:17.84,0:01:24.07,Default,,0000,0000,0000,,למעשה, אם תחשבו על זה, הם שניהם מתארים סוג של ווינסטון Dialogue: 0,0:01:24.07,0:01:28.80,Default,,0000,0000,0000,,נוכל לחשוב שיש מעין סוג של ווינסטון מופשט בעולם Dialogue: 0,0:01:28.80,0:01:36.46,Default,,0000,0000,0000,,ולכל ווינסטון יש את אותו סט של מאפיינים, כמו כינוי וגיל, ומיקום X ו-Y Dialogue: 0,0:01:36.46,0:01:42.16,Default,,0000,0000,0000,,מה שעשינו כאן, זה יצרנו שני מופעים של ווינסטון Dialogue: 0,0:01:42.16,0:01:48.46,Default,,0000,0000,0000,,כך שכל אחד מתאר ווינסטון ספציפי. אחד מהם הוא ווינסטון מתבגר, והשני הוא ווינסטון בוגר. Dialogue: 0,0:01:48.46,0:01:54.76,Default,,0000,0000,0000,,אבל שניהם מאוד דומים, יש להם הרבה מאפיינים דומים. Dialogue: 0,0:01:54.76,0:02:01.30,Default,,0000,0000,0000,,אם תחשבו על זה, הרבה דברים בעולם עובדים בצורה כזאת, שיש לנו סוגי מידע מופשטים כמו בני אדם או אנשים Dialogue: 0,0:02:01.30,0:02:05.96,Default,,0000,0000,0000,,וכולנו פשוט מופעים ספציפיים של הסוג המופשט, עם המאפיינים הייחודיים שלנו. Dialogue: 0,0:02:05.96,0:02:14.95,Default,,0000,0000,0000,,אנחנו יכולים להשתמש בשיטות של תכנות מונחה עצמים ב-Javascript, כך שמשתני ווינסטון האלו Dialogue: 0,0:02:14.95,0:02:21.83,Default,,0000,0000,0000,,יהיו ממש מופעים של אובייקט ווינסטון מופשט, כך שהם ידעו שיש להם מאפיינים משותפים. Dialogue: 0,0:02:21.83,0:02:27.97,Default,,0000,0000,0000,,כדי לעשות זאת, דבר ראשון עלינו לתאר את הטיפוס המופשט הזה של ווינסטון Dialogue: 0,0:02:27.97,0:02:30.90,Default,,0000,0000,0000,,נעשה זאת על ידי כך שניצור משתנה Dialogue: 0,0:02:30.90,0:02:38.93,Default,,0000,0000,0000,,נשמור את הטיפוס הזה בתוך משתנה. נרשום: var Winston, עם אות W גדולה - נרצה תמיד להתחיל את שמות טיפוסי האובייקטים שלנו עם אות גדולה - Dialogue: 0,0:02:38.93,0:02:42.20,Default,,0000,0000,0000,,ונרשום שזה שווה לפונקציה. Dialogue: 0,0:02:42.20,0:02:47.03,Default,,0000,0000,0000,,הפונקציה זו היא פונקציה מיוחדת שנקראת פונקציית בנאי (constructor) Dialogue: 0,0:02:47.03,0:02:52.04,Default,,0000,0000,0000,,כי זה מה שהולך להיקרא כל פעם שנרצה ליצור מופע חדש של ווינסטון. Dialogue: 0,0:02:52.04,0:02:57.86,Default,,0000,0000,0000,,אז אנחנו רוצים ליצור את teenageWinston, אז נקרא לפונקציה הזו, ואם נרצה ליצור adultWinston, גם אז נקרא לפונקציה הזו. Dialogue: 0,0:02:57.86,0:03:06.42,Default,,0000,0000,0000,,זה אומר שהפונקציה הזו צריכה לקבל את הפרמטרים שהיא צריכה לדעת עליהם בשביל ליצור אובייקט ווינסטון שלם Dialogue: 0,0:03:06.42,0:03:11.32,Default,,0000,0000,0000,,במקרה הזה, היא צריכה לדעת כינוי, גיל, מיקום X, ומיקום Y. Dialogue: 0,0:03:11.32,0:03:15.06,Default,,0000,0000,0000,,אחרי שקיבלנו את הפרמטרים האלו אנחנו צריכים לעשות איתם משהו Dialogue: 0,0:03:15.06,0:03:21.48,Default,,0000,0000,0000,,אז אנחנו צריכים לחבר את המידע הזה לאובייקט של ווינסטון. Dialogue: 0,0:03:21.48,0:03:28.67,Default,,0000,0000,0000,,אז נשתמש במילה חדשה בשפה - "this". המילה this מתייחסת למופע הנוכחי של האובייקט. Dialogue: 0,0:03:28.67,0:03:34.92,Default,,0000,0000,0000,,אז נרשום this.nickname, כלומר מאפיין הכינוי של האובייקט הזה שווה Dialogue: 0,0:03:34.92,0:03:38.42,Default,,0000,0000,0000,,למה שמעובר לפונקציית הבנאי, אוקיי? Dialogue: 0,0:03:38.42,0:03:45.73,Default,,0000,0000,0000,,ו-this.age שווה לגיל שמועבר, this.x שווה ל-x שמועבר, ו-this.y Dialogue: 0,0:03:45.73,0:03:48.38,Default,,0000,0000,0000,,שווה ל-y שמועבר. Dialogue: 0,0:03:48.38,0:03:57.50,Default,,0000,0000,0000,,אז עכשיו יש לנו את הטיפוס המופשט שנקרא ווינסטון, ויש לו פונקציית בנאי שאנחנו יכולים להשתמש בה כדי ליצור ווינסטון חדש. Dialogue: 0,0:03:57.50,0:04:00.33,Default,,0000,0000,0000,,בואו ננסה להשתמש בה! Dialogue: 0,0:04:00.33,0:04:05.24,Default,,0000,0000,0000,,ניצור את winstonTeen שוב, אבל הפעם נרשום winstonTeen שווה Dialogue: 0,0:04:05.24,0:04:10.38,Default,,0000,0000,0000,,ובמקום סוגריים מסולסלים נרשום new Winston Dialogue: 0,0:04:10.38,0:04:13.95,Default,,0000,0000,0000,,מה שאומר שאנחנו מנסים ליצור מופע חדש של ווינסטון Dialogue: 0,0:04:13.95,0:04:22.30,Default,,0000,0000,0000,,ואז נעביר את המידע שצריך - "Winsteen", 15, 20, 50, אוקיי? Dialogue: 0,0:04:22.30,0:04:27.50,Default,,0000,0000,0000,,ועכשיו נוכל למחוק את הקוד הישן כי אנחנו לא צריכים אותו יותר. Dialogue: 0,0:04:27.50,0:04:31.08,Default,,0000,0000,0000,,בסדר? זה יצר ווינסטון חדש בשם Winsteen. Dialogue: 0,0:04:31.08,0:04:35.72,Default,,0000,0000,0000,,ונוכל לרשום גם winstonAdult = new Winston Dialogue: 0,0:04:35.72,0:04:39.96,Default,,0000,0000,0000,,והכינוי שלו יהיה "Mr. Winst-a-lot" Dialogue: 0,0:04:39.96,0:04:47.41,Default,,0000,0000,0000,,והוא בן 30, והמיקום שלו הוא 229, 50. בסדר? ואז נוכל למחוק את האובייקט הפשוט Dialogue: 0,0:04:47.41,0:04:50.81,Default,,0000,0000,0000,,טה-דה! הקוד שלנו עדיין עובד. Dialogue: 0,0:04:50.81,0:04:58.09,Default,,0000,0000,0000,,מה שעשינו כאן זה לומר שיש סוג של אובייקט מופשט, סוג של מידע, שהוא Winston Dialogue: 0,0:04:58.09,0:05:05.27,Default,,0000,0000,0000,,ואנחנו יכולים ליצור מופעים חדשים של ווינסטון שיש להם מאפיינים ייחודיים להם Dialogue: 0,0:05:05.27,0:05:08.80,Default,,0000,0000,0000,,אנחנו זוכרים את ערכי המאפיינים האלו בתוכם Dialogue: 0,0:05:08.80,0:05:14.38,Default,,0000,0000,0000,,ולזכור זה ממש חשוב. כאן בפנים, יש לנו את this.nickname, this.age Dialogue: 0,0:05:14.38,0:05:20.21,Default,,0000,0000,0000,,אם בטעות לא היינו שומרים משהו ב-this.age, עכשיו זה אומר שזה "undefined" (לא מוגדר) Dialogue: 0,0:05:20.21,0:05:23.10,Default,,0000,0000,0000,,זה כי כאן למטה, הפונקציה drawWinston Dialogue: 0,0:05:23.10,0:05:28.16,Default,,0000,0000,0000,,מצפה שלאובייקט שמועבר אליה יהיה מאפיין age Dialogue: 0,0:05:28.16,0:05:30.89,Default,,0000,0000,0000,,ואם לא היינו יוצרים את this.age Dialogue: 0,0:05:30.89,0:05:34.03,Default,,0000,0000,0000,,אז אין לו מאפיין גיל, נכון? העברנו את הגיל לפונקציית הבנאי Dialogue: 0,0:05:34.03,0:05:39.36,Default,,0000,0000,0000,,אבל אז לא עשינו איתו כלום, אנחנו צריכים לחבר את הגיל לאובייקט באמצעות המילה this. Dialogue: 0,0:05:39.36,0:05:41.44,Default,,0000,0000,0000,,נחזיר את השורה הזאת. Dialogue: 0,0:05:41.44,0:05:46.36,Default,,0000,0000,0000,,אולי אתם חושבים, יופי, הקוד עכשיו עובד, וכתבת קוד יפה Dialogue: 0,0:05:46.36,0:05:50.59,Default,,0000,0000,0000,,אבל, בסופו של דבר כל מה שעשינו זה להשיג את מה שהיה לנו קודם Dialogue: 0,0:05:50.59,0:05:55.100,Default,,0000,0000,0000,,אבל הנה הדבר המגניב. כל הWinstonים שלנו עוברים דרך אותה פונקציית בנאי Dialogue: 0,0:05:55.100,0:06:00.83,Default,,0000,0000,0000,,אז אם נרצה, אנחנו יכולים לשנות דברים, לשנות משהו לגבי ווינסטון Dialogue: 0,0:06:00.83,0:06:06.06,Default,,0000,0000,0000,,כל הווינסטונים, עם שינוי רק פה. אז למשל גיל, אם נרצה לרשום פה "yrs old" Dialogue: 0,0:06:06.06,0:06:12.80,Default,,0000,0000,0000,,נוכל פשוט לשים את זה כאן, ועכשיו בכל הווינסטונים שלנו יהיה רשום "15 yrs old" או "30 yrs old", נכון? Dialogue: 0,0:06:12.80,0:06:17.28,Default,,0000,0000,0000,,אז לוקחים את החלק שמיוחד בכל אחד מהם, אבל אז יש להם גם דברים משותפים Dialogue: 0,0:06:17.28,0:06:20.97,Default,,0000,0000,0000,,וזה דבר ממש מגניב לגבי תכנות מונחה עצמים, הרעיון Dialogue: 0,0:06:20.97,0:06:26.63,Default,,0000,0000,0000,,שיש סוגי אובייקטים בעולם, ואפשר ליצור מופעים של האובייקטים האלו Dialogue: 0,0:06:26.63,0:06:29.92,Default,,0000,0000,0000,,ושישנם דברים דומים, משותפים לכולם, כמו שלכולם יש את אותם מאפיינים Dialogue: 0,0:06:29.92,0:06:35.53,Default,,0000,0000,0000,,וישנם דברים שונים - הערך של המאפיין הזה שונה מהערך של המאפיין הזה אצל המופע השני Dialogue: 0,0:06:35.53,0:06:40.74,Default,,0000,0000,0000,,אנחנו יכולים לבצע עם המופעים האלו את אותם התנהגויות, לקרוא לאותם פונקציות איתם Dialogue: 0,0:06:40.74,0:06:45.83,Default,,0000,0000,0000,,ולהתשמש בהם בצורה דומה. אז זה כמה מהדברים המגניבים לגבי תכנות מונחה עצמים Dialogue: 0,0:06:45.83,0:06:48.69,Default,,0000,0000,0000,,אבל כפי שתראו, יש גם עוד המון אחרים. Dialogue: 0,0:06:48.69,0:06:51.00,Default,,0000,0000,0000,,הישארנו עימנו!