Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Problem mit 2 Klassen und Callback

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    Problem mit 2 Klassen und Callback

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Martin 5 last edited by

      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

      OliverIO 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @Martin 5 last edited by OliverIO

        @martin-5

        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;
                     }
                 }
             }
         }
        
        
        M 1 Reply Last reply Reply Quote 1
        • M
          Martin 5 @OliverIO last edited by Martin 5

          @oliverio

          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.

          T 1 Reply Last reply Reply Quote 0
          • T
            ticaki @Martin 5 last edited by

            @martin-5

                callback = () => {
                    log("Ergebnis: " + this.text);
            //        this.timer.start(10);
                }
            
            M 1 Reply Last reply Reply Quote 1
            • OliverIO
              OliverIO last edited by

              @ticaki

              Könnte funktionieren.
              Sicher bin ich mir aber nicht da ja eigentlich immer der Kontext (this) der aufrufenden Funktion mitkommt. Bspw wie beim callback von onTimeout

              Alternativ noch mit apply oder bind. Das finde ich genauso schrecklich.

              1 Reply Last reply Reply Quote 0
              • M
                Martin 5 @ticaki last edited by Martin 5

                @ticaki
                Klasse, das geht. Sieht man ja sogar öfter wenn Funktionen übergeben werden.

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                993
                Online

                32.4k
                Users

                81.3k
                Topics

                1.3m
                Posts

                3
                6
                51
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo