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

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

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

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

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

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

    האפשרות היחידה

    אולי תפרט מה הצורך שלך בדיוק

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

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

      י תגובה 1 תגובה אחרונה
      0
      • י מנותק
        י מנותק
        יוסף בן שמעון
        השיב לאהרן ב נערך לאחרונה על ידי
        #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
                                    • דף הבית
                                    • קטגוריות
                                    • פוסטים אחרונים
                                    • משתמשים
                                    • חיפוש
                                    • חוקי הפורום