NEWS
Problem mit 2 Klassen und Callback
-
Hallo,
ich habe ein Problem mit Klassen und Callback-Funktionen.
Aus Klasse Test1 wird ein Objekt erzeugt und erzeugt seinerseits ein Objekt aus Klasse Test2 und übergibt ihm eine Callbackfunktion.
Ruft das Objekt Test2 nun die Callbackfunktion auf ist ein Zugriff auf die Variablen und Funktionen des Objektes Test1 nicht mehr möglich.
Aus den Klassen sollen später mehrere Objekte mit verschiedenen Eigenschaften erzeugt werden.Was kann man tun? Javascript unterstützt scheinbar keine "nested Klassen", also die Klasse Test2 innerhalb der Klasse Test1 anlegen.
Beispiel:
let index = 0; schedule("*/5 * * * * *", async () => { log("Dauer: " + index * 5 + " sek"); test1.run(); index++; }); class Test1{ text = "Wichtig!"; constructor(){ this.timer = new Test2(this.callback); this.timer.start(30); } callback(){ log("Ergebnis: " + this.text); // this.timer.start(10); } run(){ this.timer.run(); } } class Test2{ constructor(callback){ this.callback = callback; } start(dauer){ this.dauer = dauer; this.time = Date.now(); } run(){ if(this.time > -1){ if(Date.now() - this.time > this.dauer * 1000){ this.callback(); this.time = -1; } } } } let test1 = new Test1();Grüße Martin
-
Hallo,
ich habe ein Problem mit Klassen und Callback-Funktionen.
Aus Klasse Test1 wird ein Objekt erzeugt und erzeugt seinerseits ein Objekt aus Klasse Test2 und übergibt ihm eine Callbackfunktion.
Ruft das Objekt Test2 nun die Callbackfunktion auf ist ein Zugriff auf die Variablen und Funktionen des Objektes Test1 nicht mehr möglich.
Aus den Klassen sollen später mehrere Objekte mit verschiedenen Eigenschaften erzeugt werden.Was kann man tun? Javascript unterstützt scheinbar keine "nested Klassen", also die Klasse Test2 innerhalb der Klasse Test1 anlegen.
Beispiel:
let index = 0; schedule("*/5 * * * * *", async () => { log("Dauer: " + index * 5 + " sek"); test1.run(); index++; }); class Test1{ text = "Wichtig!"; constructor(){ this.timer = new Test2(this.callback); this.timer.start(30); } callback(){ log("Ergebnis: " + this.text); // this.timer.start(10); } run(){ this.timer.run(); } } class Test2{ constructor(callback){ this.callback = callback; } start(dauer){ this.dauer = dauer; this.time = Date.now(); } run(){ if(this.time > -1){ if(Date.now() - this.time > this.dauer * 1000){ this.callback(); this.time = -1; } } } } let test1 = new Test1();Grüße Martin
Dann übergebe mit der Funktion noch eine Referenz auf das Objekt
Test1
constructor(){ this.timer = new Test2(this.callback, this);Test2
class Test2{ constructor(callback, obj){ this.callback = callback; this.obj = obj; } run(){ if(this.time > -1){ if(Date.now() - this.time > this.dauer * 1000){ this.callback(); this.time = -1; } } } } -
Dann übergebe mit der Funktion noch eine Referenz auf das Objekt
Test1
constructor(){ this.timer = new Test2(this.callback, this);Test2
class Test2{ constructor(callback, obj){ this.callback = callback; this.obj = obj; } run(){ if(this.time > -1){ if(Date.now() - this.time > this.dauer * 1000){ this.callback(); this.time = -1; } } } }Und das obj dann wieder mit dem Callback zurück?
// in Test1 callback(obj){ log("Ergebnis: " + obj.text); obj.timer.start(10); } // in Test2 this.callback(this.obj);Erscheint mir wie "Von hinten durch die Brust ins Auge".
Im Beispielprogramm funktioniert es, mal sehen ob es im "Großen" auch so geht. -
Und das obj dann wieder mit dem Callback zurück?
// in Test1 callback(obj){ log("Ergebnis: " + obj.text); obj.timer.start(10); } // in Test2 this.callback(this.obj);Erscheint mir wie "Von hinten durch die Brust ins Auge".
Im Beispielprogramm funktioniert es, mal sehen ob es im "Großen" auch so geht.callback = () => { log("Ergebnis: " + this.text); // this.timer.start(10); } -
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden