דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. מדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?

מדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?

מתוזמן נעוץ נעול הועבר תכנות
6 פוסטים 3 כותבים 167 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    כתב ב נערך לאחרונה על ידי
    #1
    class newObj {
        constructor() {}
    
        property1 = 5
        property2 = 6
    
        method1() {}
        method2() {}
    }
    
    newObj \\ {property1: 5, property2: 6}
    

    נכון יותר לשאול אם אפשר ואיך בשביל שזה לא יקרה?

    זה 'מספים' את האוביקט


    שאלה נוספת, ישנה דרך להוסיף מתודות או מאפיינים לפרוטוטייפ אחרי יצירת המופע?

    class sonObj {
        constructor( father ) {
            this.father = father
        }
    
        property1 = 5
        property2 = 6
    
        method1() {}
        method2() {}
    }
    
    class fatherObj {
        constructor() {
            this.son = new sonObj( this )
        }
    
        property1 = 5
        property2 = 6
    
        method1() {}
        method2() {}
    }
    

    במקרה זה ה-this של האבא נרשם כמאפיין של כל מופע, אני רוצה שזה ישב על הפרוטוטייפ, אבל אני לא יכול לרשום א"ז בתוך הקלאס, כי אז ה-this הזה עדיין לא קיים.
    יש פתרון??

    yossizY תגובה 1 תגובה אחרונה
    0
    • yossizY מחובר
      yossizY מחובר
      yossiz
      השיב לאהרן ב נערך לאחרונה על ידי yossiz
      #2

      @אהרן אמר במדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?:

      נכון יותר לשאול אם אפשר ואיך בשביל שזה לא יקרה?
      זה 'מספים' את האוביקט

      חוץ ממה שזה מספים, לכאורה זה בזבוז של זכרון.

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

      אם הבנתי נכון, אתה רוצה לקבל את התוצאה של newObj.prototype = x אבל בתחביר החדש של קלאסים.
      נראה לי שאתה יכול לקבל את מבוקשך בשתי דרכים. אולי מישהו אחר יכול לשפוך יותר אור על ההבדלים ואיזה מהם יותר מומלצת.

      1

      זה עושה מאפיין גלובלי של הקלאס - השדה כלל לא מאוגד למופע של הקלאס אלא לקלאס עצמו.

      class NewObj {
          constructor() {}
       
          static property1 = 5
          static property2 = 6
       
          method1() {}
          method2() {}
      }
      let obj1 = new NewObj;
      obj1.property1; // undefined
      NewObj.property1; // 5
      

      2

      פשוט להשתמש בתחביר הישן עם התחביר החדש ביחד. הם לא סותרים אחד את השני:

      זה עושה מאפיין של ה-prototype של הקלאס.

      class NewObj {
          constructor() {}
        
          method1() {}
          method2() {}
      }
      
      NewObj.prototype.property1 = 5;
      NewObj.prototype.property2 = 6;
      
      
      let obj1 = new NewObj;
      obj1.property1; // 5
      NewObj.property1; // undefined
      

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      תגובה 1 תגובה אחרונה
      2
      • yossizY מחובר
        yossizY מחובר
        yossiz
        כתב ב נערך לאחרונה על ידי
        #3

        לענות על שאלה 2:

        @אהרן אמר במדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?:

        ישנה דרך להוסיף מתודות או מאפיינים לפרוטוטייפ אחרי יצירת המופע?

        כן
        פשוט כותבים className.prototype.propertyName = propertyValue

        במקרה זה ה-this של האבא נרשם כמאפיין של כל מופע, אני רוצה שזה ישב על הפרוטוטייפ, אבל אני לא יכול לרשום א"ז בתוך הקלאס, כי אז ה-this הזה עדיין לא קיים

        לא בדיוק הבנתי את המטרה הסופית, אבל אם אתה רוצה ירושה, תשתמש ב-extends

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        א 2 תגובות תגובה אחרונה
        1
        • א מנותק
          א מנותק
          אהרן
          השיב לyossiz ב נערך לאחרונה על ידי
          #4

          @yossiz אמר במדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?:

          לא בדיוק הבנתי את המטרה הסופית, אבל אם אתה רוצה ירושה, תשתמש ב-extends

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

          תגובה 1 תגובה אחרונה
          0
          • א מנותק
            א מנותק
            אהרן
            השיב לyossiz ב נערך לאחרונה על ידי
            #5

            @yossiz אמר במדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?:

            לא בדיוק הבנתי את המטרה הסופית, אבל אם אתה רוצה ירושה, תשתמש ב-extends

            extends לא יוצר הורשה היררכית
            אלא מיזוג בין 2 הפרוטוטייפ

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

            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              השאלה מאוד זרה לי, כל הרעיון של קלאס זה מייצג למופע בלתי תלוי בכל מופע אחר.
              אם זה היה בפרוטוטייפ אז השינוי היה משתקף בכל המופעים.
              לפעמים רוצים לאחסן מידע משותף לכלל המופעים ובשביל לחסוך זיכרון עושים מאפיין "סטטי" כמו ש@yossiz הציע.
              הלשון מספים משמע שצורך במאפיינים הוא בעיקר פנימי ואין טעם להציג אותם "מבחוץ", זה אומר שיש צורך במאפיינים פרטיים, וזה אכן לא קל בES6 לעשות את זה.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              1

              בא תתחבר לדף היומי!
              • התחברות

              • אין לך חשבון עדיין? הרשמה

              • התחברו או הירשמו כדי לחפש.
              • פוסט ראשון
                פוסט אחרון
              0
              • דף הבית
              • קטגוריות
              • פוסטים אחרונים
              • משתמשים
              • חיפוש
              • חוקי הפורום