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

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

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

איך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?

מתוזמן נעוץ נעול הועבר תכנות
22 פוסטים 4 כותבים 257 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • י מנותק
    י מנותק
    יוסף בן שמעון
    השיב לאהרן ב נערך לאחרונה על ידי
    #8

    @אהרן אז תעביר אותו כפרמטר

    א 2 תגובות תגובה אחרונה
    2
    • א מנותק
      א מנותק
      אהרן
      השיב ליוסף בן שמעון ב נערך לאחרונה על ידי אהרן
      #9

      @יוסף-בן-שמעון

      ~~ככה!! ~~

      const asyncMap = (arr, task) => Promise.all(
          arr.map((row, idx, arr) => new Promise((reslove) => task.call(null ,row, reslove, idx, arr)).catch(console.log))
      )
      
      

      נראה שה-this של הגלובל סקופ הוא undefined
      צריך לאפס אותו ל-null

      נראה שטעיתי, רגע

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

        @יוסף-בן-שמעון אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:

        @אהרן אז תעביר אותו כפרמטר

        איך console.log כן מכניס את הדיס הנכון?

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

          @אהרן תפרט את הוכחתך מהconsole.log.

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

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

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

            @dovid
            אויש כמה שטויות 🤒

            התכוונתי להביא את ההוכחה מ-setTimeout
            אבל אז גליתי שהוא מקבל את ה-this בגלל הפונקציה האנונימית שכתובה מתוך הפונקציה שקוראת וממילא מקבלת את ה-this

                    setTimeout( _=> myFunc() )
            
            

            אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.

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

              @אהרן אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:

              אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.

              מתחילת האשכול לא הבנתי מה רע בפונקציה היפה שעשית,
              איפה צריך this.

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

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

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

                @dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:

                @אהרן אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:

                אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.

                איפה צריך this.

                בתוך ה-task

                כשקוראים לו מתוך מתודה של מופע שמשתמשים יותר ב-this, זה יותר חסר.
                במקרה הזה, ה-task עצמו הוא גם מתודה של המופע.

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

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

                  const asyncMap = (arr, task) => Promise.all(
                      arr.map((row, idx, arr) => new Promise(reslove => task(row, reslove, idx, arr)).catch(console.log))
                  )
                  

                  אני אישית בחיים לא פונה לthis הארור של js...

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

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

                  dovidD א 2 תגובות תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב לdovid ב נערך לאחרונה על ידי
                    #16

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

                    const asyncMap = (arr, task) => Promise.all(
                        arr.map((row, idx, arr) => task(row).catch(console.log))
                    )
                    
                    

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

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

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

                      @dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:

                      @אהרן אההממ אז המתודות הללו נדפקות בכל קלאבק ששייך לסקופ שונה?

                      גם כשקאלבק שייך לאותו סקופ
                      הוא מקבל סקופ חדש, של יצירת asyncMap.

                      אם כשמעבירים את זה כפונקציה ללא call זה עובד

                      זה לא

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

                        @dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:

                        למה שלא תעצב שהם יחזירו בעצמם פרומייז

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

                        במקרה שכן קצר יותר להשתמש ישירות ב-Promise.all.

                        תגובה 1 תגובה אחרונה
                        1
                        • י מנותק
                          י מנותק
                          יוסף בן שמעון
                          כתב ב נערך לאחרונה על ידי
                          #19

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

                          callToFunc(this.callback)
                          

                          הקולבק מתנתק מהאבא שלו, והוא לא יזהה את הזיס שלו.
                          אם זו הבעיה שלך, הפיתרון הוא להעביר את הקולבק כך:

                          callToFunc(() => this.callback())
                          
                          yossizY תגובה 1 תגובה אחרונה
                          2
                          • yossizY מנותק
                            yossizY מנותק
                            yossiz
                            השיב ליוסף בן שמעון ב נערך לאחרונה על ידי yossiz
                            #20

                            @יוסף-בן-שמעון אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:

                            אם זו הבעיה שלך, הפיתרון הוא להעביר את הקולבק כך:
                            ‎callToFunc(() => this.callback())‎

                            או כך: callToFunc(function() { return this.callback() })‎
                            (אני רק מבהיר שזה לא קשור לפונקציות חצים.)

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

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

                              @yossiz לא מדויק, בצורה שכתבת אתה בכלל לא מעביר קולבק כי בפונקציה האנונימית שלך כבר יש זיס עצמי, צריך להעביר אותו עם פונקצית חץ, תריץ את הקוד הזה ותראה את שלש ההדפסות:

                              function callToFunc (callback) {
                                callback()
                              }
                              
                              class Class {
                                constructor() {
                                  callToFunc(this.callback)
                                  callToFunc(() => this.callback())
                                  callToFunc(function () { return this.callback() })
                                }
                              
                                callback () {
                                  console.log(this)
                                }
                              }
                              
                              new Class()
                              
                              
                              yossizY תגובה 1 תגובה אחרונה
                              0
                              • yossizY מנותק
                                yossizY מנותק
                                yossiz
                                השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
                                #22

                                @יוסף-בן-שמעון צודק לגמרי. הייתי צריך לכתוב כך:

                                const thisObj = this;
                                callToFunc(function() { return thisObj.callback() })‎
                                

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

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

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

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

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