Instanz im Objekt ermitteln
Ehrlicher
- javascript
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?
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 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.
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...
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.