דף הבית » קידוד » Object-Oriented JavaScript (OOJS) 3 דרכים ליצור מופעים אובייקט

    Object-Oriented JavaScript (OOJS) 3 דרכים ליצור מופעים אובייקט

    כאשר שפת תכנות היא הכל על אובייקטים, הדבר הראשון שאנחנו צריכים ללמוד הוא כיצד ליצור אובייקטים - -. יצירת אובייקטים ב- JavaScript היא קלה למדי: זוג כתפיות מסולסלות יעשה את העבודה, עם זאת, כלומר לא הדרך היחידה כדי ליצור אובייקט ולא הדרך היחידה אתה אי פעם צריך להשתמש.

    ב- JavaScript, מופעי אובייקטים הם שנוצרו מתוך אובייקטים מובנים ולהגיע לידי קיום כאשר התוכנית פועלת. לדוגמה, תאריך הוא אובייקט מובנה שנותן לנו מידע על תאריכים. אם ברצוננו להציג את התאריך הנוכחי בדף, אנו צריך מופע ריצה של תאריך כי נושאת את המידע על התאריך הנוכחי.

    JavaScript גם מאפשר לנו להגדיר את האובייקטים שלנו זה יכול לייצר מופעים אובייקט משלהם בזמן ריצה. ב- JavaScript, הכל הוא חפץ ולכל אובייקט יש אבות קדמונים שקוראים לו אובייקט. היצירה של מופע אובייקט נקרא תדגום.

    1. חדש מפעיל

    אחת השיטות הנפוצות ביותר הידועות ליצירת מופע אובייקט חדש היא על ידי משתמש ב חדש מפעיל.

    אתה צריך בנאי כדי להפוך את חדש - עבודה. בנאי הוא שיטה של ​​אובייקט שמרכיב א מופע חדש של אותו אובייקט. התחביר הבסיסי שלה נראה כך:

     בנאי חדש () 

    בנאי יכול לקבל טיעונים זה יכול לשמש כדי לשנות או להוסיף מאפיינים למופע אובייקט זה בונה. הבנאי יש שם זהה כמו האובייקט שהיא שייכת אליו.

    הנה דוגמה כיצד ליצור למשל של תאריך () אובייקט עם ה חדש מילת מפתח:

     dt = new date (2017, 0, 1) console.log (dt) // יום ראשון 01 ינואר 2012 00:00:00 GMT + 0100 

    תאריך () הוא בנאי ליצור חדש תאריך אובייקט. בונים שונים לאובייקט לקחת טיעונים שונים כדי ליצור את אותו סוג של אובייקט מופעים עם תכונות מגוונות.

    לא כל אובייקטים מובנים ב- JavaScript יכול להיות מופעים כמו תאריך. יש חפצים לא מגיעים עם בנאיYou מתמטיקה, JSON ו משקף, אבל הם עדיין חפצים רגילים.

    בין האובייקטים המובנים כי יש בנאי (ים), סמל לא ניתן לקרוא בסגנון הבנאי כדי ליצור חדש סמל למשל. זה יכול להיות רק נקרא כפונקציה אשר מחזירה חדש סמל ערך.

    כמו כן, בין המובנה אובייקטים בעלי בנאי (ים), לא כל צריך בוני שלהם כדי להיקרא עם חדש מפעיל על מנת להיות מופעים. פונקציה, מערך, שגיאה, ו RegExp יכול גם להיקרא כפונקציות, ללא שימוש חדש מילת מפתח, והם מייצרים ומוציאים מופע אובייקט חדש.

    2. משקף אובייקט

    מתכנני Backend כבר מכירים ממשק API של השתקפות. השתקפות היא תכונה של שפות תכנות לבדוק ולעדכן חלק מן הישויות הבסיסיות, כגון אובייקטים ושיעורים, בזמן ריצה.

    ב- JavaScript, אתה כבר יכול לבצע כמה פעולות השתקפות באמצעות אובייקט. אבל, א ממשק API השתקפות תקין בסופו של דבר התקיים גם ב- JavaScript.

    ה משקף אובייקט יש קבוצה של שיטות ליצור ולעדכן מופעים אובייקט. ה משקף אובייקט אין בנאי, כך שזה לא יכול להיות מופעים עם חדש מפעיל, ו, בדיוק כמו מתמטיקה ו JSON, זה לא יכול להיקרא כפונקציה או.

    למרות זאת, משקף יש המקבילה של חדש מפעיל: ה Reflect.construct () שיטה.

     Reflect.construct (יעד, ארגומנטיםList [, NewTarget]) 

    גם את יעד ואת אופציונלי NewTarget ארגומנטים הם חפצים שיש להם בונים משלהם, בזמן ארגומנטים הוא רשימת הארגומנטים כדי להעביר את הבנאי של יעד.

     var dt = Reflect.construct (תאריך, [2017, 0, 1]); console.log (dt); // Sun Jan 01 2017 00:00:00 GMT + 0100 

    הקוד לעיל יש את אותו אפקט כמו תאריך () משתמש ב חדש מפעיל. למרות שאתה עדיין יכול להשתמש חדש, השתקפות היא תקן ECMAScript 6. זה גם מאפשר לך לעשות שימוש NewTarget ויכוח, וזה יתרון נוסף על פני חדש מפעיל.

    הערך של NewTarget(ליתר דיוק, זה אב טיפוס של NewTargetבנאי) הופך לאב הטיפוס של המופע החדש שנוצר.

    אב טיפוס הוא רכוש של אובייקט, שערכו הוא גם חפץ, נושאת את המאפיינים של האובייקט המקורי. בקיצור, חפץ מקבל את חבריו מאב הטיפוס.

    הנה, בוא נראה דוגמה:

     (ב ') (ב') ( הודעה () console.log ('הודעה מ- B')  נתונים () console.log ('נתונים מ- B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // הודעה מ- Console.log (obj.data ()); // נתונים מ B console.log (obj מופע של B) // נכון 

    על ידי חולף ב כמו הטיעון השלישי Reflect.construct (), את הערך אב טיפוס של obj -J עשוי להיות זהה כמו אב טיפוס של ב(שבו יש את המאפיינים הודעה ו נתונים).

    לכן, obj ניתן לגשת אל הודעה ו נתונים, זמין באב טיפוס שלה. אך מאז obj נעשה באמצעות א, יש לו גם משלו הודעה זה התקבל מ א.

    למרות ש obj הוא בנוי כמערך, הוא לא מופע של מערך, כי אב טיפוס שלה מוגדר אובייקט.

     obj = Reflect.construct (מערך, [1,2,3], אובייקט) console.log (obj) // מערך [1, 2, 3] console.log (obj מופע של מערך) // false 

    Reflect.construct () יכול להיות שימושי כאשר אתה רוצה ליצור אובייקט באמצעות יותר מתכנית אחת.

    3. Object.create () שיטה

    ניתן גם ליצור אובייקט רגיל חדש עם אב טיפוס מסוים דרך Object.create (). גם זה עשוי להיראות דומה מאוד לשימוש חדש אבל זה לא.

     Object.create (O [, PropertiesObject]) 

    ה הו הטיעון הוא אובייקט משרת את אב הטיפוס עבור האובייקט החדש שייווצר. אופציונלי מאפייניםObject הוויכוח הוא רשימה של נכסים ייתכן שתרצה להוסיף את האובייקט החדש.

     (א '):  הודעה () [conable.log (' הודעה מ- A ') var obj = Object.create (חדש A), data: writable: true, configurable: true, value: (obj.data) () נתונים מתוך obj obj1 = object.create () חדש (a), foo: writable: true, configurable: true, value: function () return 'foo from obj1' console.log (obj1.message ()) הודעה ממסוף. log (obj1.foo ()) // foo מ- obj1 

    בתוך ה obj אובייקט, המאפיין הנוסף הוא נתונים, בעוד ב obj1, זה foo. אז, כפי שאתם רואים, אנחנו יכולים מאפיינים ושיטות שנוספו לאובייקט חדש.

    זה נהדר כאשר אתה רוצה ליצור אובייקטים מרובים מאותו סוג אבל עם תכונות או שיטות משלימות שונות. ה Object.create () תחביר חוסך את הצרות של קידוד כל אחד מהם בנפרד.

    המאמר הקודם
    8600 GTS