kostenloser Webspace werbefrei: lima-city


Wert innerhalb Closure ändern

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    fvg

    fvg hat kostenlosen Webspace.

    Wie ist es mir möglich einen Wert aus der closure rauszubekommen?
    Die Schleife wird nicht abgebrochen, da das mit den Scopes anscheinend nicht hinhaut.
    dpd gibt leider keine Werte zurück ..

    while ( ! this.short) {
        for (i = 0; i < 5; i++) {
            randomNumber = Math.floor(Math.random() * chars.length);
            random += chars.substring(randomNumber, randomNumber + 1);
        }
    
        dpd.links.get({short: random}, function(res, err) {
            if (err)
                cancel('Error', 500);
    
            if ( ! res.length)
                this.short = random;
        }); 
    }


    Beitrag zuletzt geändert: 9.8.2013 15:20:58 von fvg
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hi,

    du hast einen Denkfehler in deinem Code, this steht immer für das innerste Objekt, von dem aus es aufgerufen wird.
    Um das zu verstehen will ich dir hier ein paar Beispiele geben:
    var fn = function(){return this};
    
    // Die Funktion gibt eine Referenz auf das window-Objekt zurück.
    fn();
    // Die Funktion gibt bei einem Klick eine Referenz auf den body zurück!
    document.body.onclick = fn;
    // Die Funktion gibt bei einem Klick eine
    // Referenz auf das window-Objekt zurück.
    document.body.onclick = fn.bind(this);


    Um jetzt dein Problem zu lösen würde ich den Code wie folgt ändern. Hierbei wird this in einer eigenen Variable zwischengespeichert:
    var self = this;
    while ( ! self.short) {
        for (i = 0; i < 5; i++) {
            randomNumber = Math.floor(Math.random() * chars.length);
            random += chars.substring(randomNumber, randomNumber + 1);
        }
    
        dpd.links.get({short: random}, function(res, err) {
            if (err)
                cancel('Error', 500);
    
            if ( ! res.length)
                self.short = random;
        }); 
    }


    Mit freundlichen Grüßen
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!