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:|