Wert innerhalb Closure ändern
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
beispiel
code
denkfehler
funktion
innerste objekt
objekt
paar
problem
re
referenz
schleife
verstehen
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage