Private Methode aufrufen in window.setTimeout
Christian S.
- javascript
Hi,
ich habe eine JavaScript Klasse, die eine Private Methode ("fadeIn") hat.
das Problem ist, dass window.setTimeout(...) die Funktion nicht kennt (vermutlich weil er denkt, sie gehöre zum globalen (window) Objekt?)
Ich möchte einfach dass fadeIn nach bestimmter Zeit wieder aufgerufen wird.
Gibt es auch eine Möglichkeit die Funktion einfach selbst aufzurufen, ohne den Namen anzugeben...?
Hier der Code:
function MyClass()
{
// [...] mehr Code...
var fadeIn = function(id, i)
{
var obj = document.getElementById(id);
var stepCount = 10;
var stepSize = (Math.PI / 2) / stepCount;
i += stepSize;
var opac = Math.sin(i);
obj.style.opacity = opac;
if(i < stepSize * stepCount)
{
window.setTimeout("fadeIn('" +id+ "', " + i + ")", 100);
}
};
}
Danke!
Gruß
Christian
Hallo,
ich habe eine JavaScript Klasse, die eine Private Methode ("fadeIn") hat.
Hm, AFAIK gibt es in JS keine Klassen…
das Problem ist, dass window.setTimeout(...) die Funktion nicht kennt (vermutlich weil er denkt, sie gehöre zum globalen (window) Objekt?)
Ich möchte einfach dass fadeIn nach bestimmter Zeit wieder aufgerufen wird.
Gibt es auch eine Möglichkeit die Funktion einfach selbst aufzurufen, ohne den Namen anzugeben...?
Du suchst wahrscheinlich sowas:
window.setTimeout(function(){fadeIn(id,i), 100})
mfg. Daniel
Hallo,
window.setTimeout(function(){fadeIn(id,i), 100})
Fehler detected. So müsste es gehen:
window.setTimeout(function(){fadeIn(id,i)}, 100);
mfg. Daniel
Hallo,
window.setTimeout(function(){fadeIn(id,i), 100})
Fehler detected. So müsste es gehen:
window.setTimeout(function(){fadeIn(id,i)}, 100);
mfg. Daniel
Hi,
vielen Dank!! Klappt tatsächlich so!
Gruß
Christian
Hi
Hm, AFAIK gibt es in JS keine Klassen…
keine richtigen Klassen, aber dennoch ein Objektmodell.
Du suchst wahrscheinlich sowas:
window.setTimeout(function(){fadeIn(id,i), 100})
denke nicht, dass das klappt. setTimeout braucht doch einen string zu evaluieren. und die 100 müsste auch außerhalb der function() stehen.
Gruß
Christian
Hallo,
Du suchst wahrscheinlich sowas:
window.setTimeout(function(){fadeIn(id,i), 100})
denke nicht, dass das klappt. setTimeout braucht doch einen string zu evaluieren.
Wer sagt, dass setTimout evaluieren *muss*? Man kann auch direkt eine function erstellen.
und die 100 müsste auch außerhalb der function() stehen.
Ja, siehe Korrektur.
mfg. Daniel
Hallo,
Bei der besagten einfachen Lösung musst du beachten, dass die Methode nicht mehr im Kontext der Objektinstanz ausgeführt wird, das heißt, du kannst nicht »this« verwenden, um auf die Instanz zuzugreifen (machst du bei dem genannten Code auch nicht - ich wills trotzdem mal anmerken).
Hier gäbe es Möglichkeiten, um this weiter benutzen zu können:
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#methoden-eigener-objekte-und-kontext
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#alternativen-kontext
Gibt es auch eine Möglichkeit die Funktion einfach selbst aufzurufen, ohne den Namen anzugeben...?
Jein, über arguments.callee kann man auf die aktuelle Funktion zugreifen - hilft hier aber nicht weiter, denn bei setTimeout("arguments.callee()", 1000) zeigt arguments.callee nicht auf die richtige Funktion.
Mathias
Hier gäbe es Möglichkeiten, um this weiter benutzen zu können:
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#methoden-eigener-objekte-und-kontext
Kannte ich noch gar nicht, ist aber sehr gut und bringt mir auch noch was.
Aber ein kleiner Fehler hat sich eingeschlichen:
Im Kapitel "Modularisierung und Namensräume"
var Namensraum.Container = {
…
};
Struppi.