Der folgende Beitrag wurde am 17. 10. 2007, 12:20 Uhr von Ehrlicher veröffentlicht.
Hallo zusammen,
ich habe mir ein Objekt definiert und möchte innerhalb des Objektes eine bestimmte Methode dieses Objektes an window.setInterval() übergeben.
Der Aufruf window.SetInterval("this.meineMethode()", 1000) klappt in diesem Kontext leider nicht. Wenn ich this durch den Namen der konkreten Instanz ersetze funktioniert es, aber der universelle Ansatz meines Objektes geht verloren.
Gibt es einen Trick, um innerhalb eines Objektes auf den Namen der Instanz zu schliessen?
Der folgende Beitrag wurde am 17. 10. 2007, 12:58 Uhr von JürgenB veröffentlicht.
Hallo Ehrlicher,
schau dir mal den Artikel von molily an: http://aktuell.de.selfhtml.org/artikel/javascript/organisation/.
Vieleicht hilft auch meine Testverrsion einer Zeitverzögertebn Schleife: http://www.j-berkemeier.de/test/Delay_Loop_Oo.html.
Gruß, Jürgen
Der folgende Beitrag wurde am 17. 10. 2007, 14:36 Uhr von ehrlicher veröffentlicht.
> Hallo Ehrlicher,
>
> schau dir mal den Artikel von molily an: http://aktuell.de.selfhtml.org/artikel/javascript/organisation/.
> Vieleicht hilft auch meine Testverrsion einer Zeitverzögertebn Schleife: http://www.j-berkemeier.de/test/Delay_Loop_Oo.html.
>
> Gruß, Jürgen
Hallo Jürgen,
die beiden Links haben mir sehr geholfen. Mein Verständnisproblem lag beim Kontext, der für this gültig.
P.S. Dank auch an Struppi und globe. Nachdem ich Jürgens Hinweis kapiert hatte, war mir eure Lösung auch einleuchtend.
Der folgende Beitrag wurde am 17. 10. 2007, 13:00 Uhr von globe veröffentlicht.
n'abend,
> Der Aufruf window.SetInterval("this.meineMethode()", 1000) klappt in diesem Kontext leider nicht. Wenn ich this durch den Namen der konkreten Instanz ersetze funktioniert es, aber der universelle Ansatz meines Objektes geht verloren.
Das funktioniert nicht, weil "this.meineMethode()" im Kontext von window ausgeführt wird. Es wird also versucht window.meineMethode() auszuführen. Diese Methode wird vermutlich (/hoffentlich) einfach nicht existieren.
> Gibt es einen Trick, um innerhalb eines Objektes auf den Namen der Instanz zu schliessen?
nein, da das Objekt seinen "Namen" nicht kennt. wozu auch? Namen sind nur Schall und Rauch™.
Möglicherweise möchtest du dir mal des Meisters Artikel Organisation von JavaScripten durchlesen, um das folgende eingehend zu verstehen.
Du kannst den Funktionsaufruf kapseln / einschliessen (engl. to enclose). Diese Technik nennt man Closures. Beispielhaft:function MyObject()
{
// wir wollen auf this zugreifen können, ohne das schlüsselwort this zu benutzen und referenzieren es deshalb mittels self, welches wir später in eine Funktion einschliessen können
var self = this;
var interval = null;
var counter = 1;
// funktion zum registrieren eines intervals
this.start = function()
{
var gekapselterAufruf = function()
{
// self ist hier automatisch verfügbar und referenziert das aktuelle objekt.
self.ausfuehren();
// wir wollen es nicht übertreiben und stoppen den interval nach 5x wieder
counter++;
if( counter > 5 )
self.stop();
};
interval = window.setInterval( gekapselterAufruf ,1000); // keine ()! wir übergeben eine Referenz auf die Funktion, wir führen diese hier aber noch nicht aus!
};
// funktion zum stoppen des intervals
this.stop = function()
{
window.clearInterval( interval );
interval = null;
}
// eine methode des objekts, die wir ausführen wollen
this.ausfuehren = function()
{
alert( "schön von dir zu hören, nummer " + counter );
};
}
var instance = new MyObject();
instance.start();
weiterhin schönen abend...
--
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
Der folgende Beitrag wurde am 17. 10. 2007, 13:01 Uhr von Struppi veröffentlicht.
> Gibt es einen Trick, um innerhalb eines Objektes auf den Namen der Instanz zu schliessen?
nein, eine Instanz hat keinen Namen.
Aber es gibt einen anderen Weg.function DeinObjekt() {
var self = this;
this.funktion = function() {
...
};
window.interval( function() {self.funktion();}, xxx);
}
Struppi.
© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4