Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [SOLVED] Auf Änderung eines Klassen Attributs reagieren?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    993

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

[SOLVED] Auf Änderung eines Klassen Attributs reagieren?

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptmonitoring
13 Beiträge 3 Kommentatoren 794 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • iPhilBlnI Offline
    iPhilBlnI Offline
    iPhilBln
    schrieb am zuletzt editiert von iPhilBln
    #1

    Hej,
    ich bastel grade an einem Skript welches verschiedene Klassen beinhaltet, die von einer übergeordneten Klasse erben sollen.
    Ich stehe aktuell vor dem Problem, dass wenn ein Attribut durch eine Methode der übergeordneten Klasse geändert wird, ich darauf in der untergeordneten Klasse reagieren möchte. Wie setzt man denn sowas am Besten um, ohne die Methode neu definieren zu müssen?

    'use strict';
    
    const eventListener = new Event('test');
    
    class Name{
        constructor(name){
            this.name = name;     
        }
    
        setName(name){
            this.name = name;
        }
    }
    
    class Surname extends Name{
        constructor(name){
    
            super(name);
            this.surname = undefined;
    
            this.name.addEventListener('test', val => {
                val === 'Max' ? this.surname = 'Mustermann' : this.surname = undefined;
    
                console.log(`Vorname: ${this.name} Nachname: ${this.surname}`);
            });
        }
    }
    
    const person = new Surname('Max');
    
    person.setName('Paul');
    

    Mit dem Beispiel erhalte ich nur folgende Fehlermeldung:

    info: javascript.0 (240790) script.js.testskripte.eventListener: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
    error: javascript.0 (240790) script.js.testskripte.eventListener: ReferenceError: Event is not defined
    error: javascript.0 (240790)     at script.js.testskripte.eventListener:3:23
    error: javascript.0 (240790)     at script.js.testskripte.eventListener:33:3
    
    CodierknechtC OliverIOO 2 Antworten Letzte Antwort
    0
    • iPhilBlnI iPhilBln

      Hej,
      ich bastel grade an einem Skript welches verschiedene Klassen beinhaltet, die von einer übergeordneten Klasse erben sollen.
      Ich stehe aktuell vor dem Problem, dass wenn ein Attribut durch eine Methode der übergeordneten Klasse geändert wird, ich darauf in der untergeordneten Klasse reagieren möchte. Wie setzt man denn sowas am Besten um, ohne die Methode neu definieren zu müssen?

      'use strict';
      
      const eventListener = new Event('test');
      
      class Name{
          constructor(name){
              this.name = name;     
          }
      
          setName(name){
              this.name = name;
          }
      }
      
      class Surname extends Name{
          constructor(name){
      
              super(name);
              this.surname = undefined;
      
              this.name.addEventListener('test', val => {
                  val === 'Max' ? this.surname = 'Mustermann' : this.surname = undefined;
      
                  console.log(`Vorname: ${this.name} Nachname: ${this.surname}`);
              });
          }
      }
      
      const person = new Surname('Max');
      
      person.setName('Paul');
      

      Mit dem Beispiel erhalte ich nur folgende Fehlermeldung:

      info: javascript.0 (240790) script.js.testskripte.eventListener: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
      error: javascript.0 (240790) script.js.testskripte.eventListener: ReferenceError: Event is not defined
      error: javascript.0 (240790)     at script.js.testskripte.eventListener:3:23
      error: javascript.0 (240790)     at script.js.testskripte.eventListener:33:3
      
      CodierknechtC Online
      CodierknechtC Online
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      @iphilbln
      Ich schicke mal vorweg: JS ist nicht unbedingt meine Kernkompetenz!

      In anderen Sprachen ist es so:
      Wenn die abgeleiteten Klassen jeweils anders reagieren sollen, muss auch in jeder Klasse die entsprechende Methode überschrieben werden. Es soll ja ein anderes Verhalten implementiert werden.
      Soll heißen: Das grundsätzliche Verhalten wird in der Basisklasse definiert, das jeweils abweichende Verhalten in den abgeleiteten Klassen.

      Ich gehe mal davon aus, dass es keine Instanzen der Basisklasse gibt, sondern nur von den diversen abgeleiteten Klassen?

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      iPhilBlnI 1 Antwort Letzte Antwort
      0
      • CodierknechtC Codierknecht

        @iphilbln
        Ich schicke mal vorweg: JS ist nicht unbedingt meine Kernkompetenz!

        In anderen Sprachen ist es so:
        Wenn die abgeleiteten Klassen jeweils anders reagieren sollen, muss auch in jeder Klasse die entsprechende Methode überschrieben werden. Es soll ja ein anderes Verhalten implementiert werden.
        Soll heißen: Das grundsätzliche Verhalten wird in der Basisklasse definiert, das jeweils abweichende Verhalten in den abgeleiteten Klassen.

        Ich gehe mal davon aus, dass es keine Instanzen der Basisklasse gibt, sondern nur von den diversen abgeleiteten Klassen?

        iPhilBlnI Offline
        iPhilBlnI Offline
        iPhilBln
        schrieb am zuletzt editiert von iPhilBln
        #3

        @codierknecht hmm ne das hab ich nicht vor. Dann wäre klar, dass ich die Methode komplett neu definieren müsste.
        In meinem Skript gibt es eigentlich eine Methode die für alle Klassen gleich ein Attribut setzt. Wenn sich dieses Attribut ändert, soll in der erbenden Klasse eine Methode aufgerufen werden, die sich dann aber unterscheidet. Hoffe das war verständlich?

        Jep genau, es soll am Ende nur Instanzen der abgeleiteten Klassen geben.

        CodierknechtC 1 Antwort Letzte Antwort
        0
        • iPhilBlnI iPhilBln

          Hej,
          ich bastel grade an einem Skript welches verschiedene Klassen beinhaltet, die von einer übergeordneten Klasse erben sollen.
          Ich stehe aktuell vor dem Problem, dass wenn ein Attribut durch eine Methode der übergeordneten Klasse geändert wird, ich darauf in der untergeordneten Klasse reagieren möchte. Wie setzt man denn sowas am Besten um, ohne die Methode neu definieren zu müssen?

          'use strict';
          
          const eventListener = new Event('test');
          
          class Name{
              constructor(name){
                  this.name = name;     
              }
          
              setName(name){
                  this.name = name;
              }
          }
          
          class Surname extends Name{
              constructor(name){
          
                  super(name);
                  this.surname = undefined;
          
                  this.name.addEventListener('test', val => {
                      val === 'Max' ? this.surname = 'Mustermann' : this.surname = undefined;
          
                      console.log(`Vorname: ${this.name} Nachname: ${this.surname}`);
                  });
              }
          }
          
          const person = new Surname('Max');
          
          person.setName('Paul');
          

          Mit dem Beispiel erhalte ich nur folgende Fehlermeldung:

          info: javascript.0 (240790) script.js.testskripte.eventListener: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
          error: javascript.0 (240790) script.js.testskripte.eventListener: ReferenceError: Event is not defined
          error: javascript.0 (240790)     at script.js.testskripte.eventListener:3:23
          error: javascript.0 (240790)     at script.js.testskripte.eventListener:33:3
          
          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #4

          @iphilbln

          da stimmen ein paar sachen nicht in deinem code.
          ich gehe davon aus, das du das Event-System von node meinst?
          Schau dir mal das Beispiel hier an
          https://www.w3schools.com/nodejs/nodejs_events.asp
          das ist ein wenig verständlicher wie das in der node doku selbst.

          Im Prinzip fügst du deiner Klasse ein eventEmitter-Objekt hinzu.
          Mit dem kannst du bei Änderung eines Attributs ein Event mit dem emit-Befehl erzeugen.

          Jemand der deine Klasse verwendet, der kann dann bspw mit dem Befehl xxx.on("eventname",Funktionsbaustein) darauf reagieren.

          und hier 2 Beispielcodes wie man das in eine Klasse einbaut.
          Einmal über Vererbung und einmal über Komposition.
          https://stackoverflow.com/questions/59100598/how-do-i-add-custom-events-to-classes-in-node

          Nachtrag: Falls du iobroker hier nur zum lernen verwendest, dann lad dir lieber visual code runter.
          der bietet die viel mehr support, was das debuggen angeht und ist kostenlos
          https://code.visualstudio.com/

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          iPhilBlnI 1 Antwort Letzte Antwort
          1
          • iPhilBlnI iPhilBln

            @codierknecht hmm ne das hab ich nicht vor. Dann wäre klar, dass ich die Methode komplett neu definieren müsste.
            In meinem Skript gibt es eigentlich eine Methode die für alle Klassen gleich ein Attribut setzt. Wenn sich dieses Attribut ändert, soll in der erbenden Klasse eine Methode aufgerufen werden, die sich dann aber unterscheidet. Hoffe das war verständlich?

            Jep genau, es soll am Ende nur Instanzen der abgeleiteten Klassen geben.

            CodierknechtC Online
            CodierknechtC Online
            Codierknecht
            Developer Most Active
            schrieb am zuletzt editiert von
            #5

            @iphilbln sagte in Auf Änderung eines Klassen Attributs reagieren?:

            @codierknecht hmm ne das hab ich nicht vor. Dann wäre klar, dass ich die Methode komplett neu definieren müsste.
            In meinem Skript gibt es eigentlich eine Methode die für alle Klassen gleich ein Attribut setzt. Wenn sich dieses Attribut ändert, soll in der erbenden Klasse eine Methode aufgerufen werden, die sich dann aber unterscheidet. Hoffe das war verständlich?

            Eine Basisklasse sollte von ihren Nachfahren völlig unabhängig sein.
            Besondere Verhaltensweisen werden ausschließlich in den abgeleiteten Klassen definiert.
            Also wird - zumindest in "meiner" Sprache - in den abgeleiteten Klassen der Setter für die Attribute (Member) überschrieben.
            Der Setter wird in der Basisklasse als "abstract" definiert - damit muss er in den Nachfahren implementiert werden.
            Und so kann das halt in jeder Klasse anders geregelt werden.

            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

            Proxmox 9.1.1 LXC|8 GB|Core i7-6700
            HmIP|ZigBee|Tasmota|Unifi
            Zabbix Certified Specialist
            Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

            iPhilBlnI 1 Antwort Letzte Antwort
            0
            • OliverIOO OliverIO

              @iphilbln

              da stimmen ein paar sachen nicht in deinem code.
              ich gehe davon aus, das du das Event-System von node meinst?
              Schau dir mal das Beispiel hier an
              https://www.w3schools.com/nodejs/nodejs_events.asp
              das ist ein wenig verständlicher wie das in der node doku selbst.

              Im Prinzip fügst du deiner Klasse ein eventEmitter-Objekt hinzu.
              Mit dem kannst du bei Änderung eines Attributs ein Event mit dem emit-Befehl erzeugen.

              Jemand der deine Klasse verwendet, der kann dann bspw mit dem Befehl xxx.on("eventname",Funktionsbaustein) darauf reagieren.

              und hier 2 Beispielcodes wie man das in eine Klasse einbaut.
              Einmal über Vererbung und einmal über Komposition.
              https://stackoverflow.com/questions/59100598/how-do-i-add-custom-events-to-classes-in-node

              Nachtrag: Falls du iobroker hier nur zum lernen verwendest, dann lad dir lieber visual code runter.
              der bietet die viel mehr support, was das debuggen angeht und ist kostenlos
              https://code.visualstudio.com/

              iPhilBlnI Offline
              iPhilBlnI Offline
              iPhilBln
              schrieb am zuletzt editiert von
              #6

              @oliverio Danke, das war genau das was ich gesucht habe.
              Hab mir jetzt mal fix mein Beispiel umgeschrieben:

              'use strict';
              
              const events = require('events');
              
              
              class Name{
                  constructor(name){
                      this.name = name;
                      
                      this.listener = new events.EventEmitter();
                  }
              
                  setName(name){
                      this.name = name;
                      this.listener.emit('name', this.name);
                  }
              }
              
              class Surname extends Name{
                  constructor(name){
              
                      super(name);
                      this.surname = undefined;
              
                      this.listener.on('name', this.setSurname );
                  }
              
                  setSurname(surname) {
                      surname === 'Max' ? this.surname = 'Mustermann' : this.surname = undefined;
              
                      console.log(`Vorname: ${this.name} Nachname: ${this.surname}`);
                  }
              }
              
              const person = new Surname('Max');
              
              person.setName('Paul');
              
              setTimeout(() => {
                  person.setName('Max');
              }, 2 * 1000);
              

              Läuft soweit erstmal, sehe aber grade noch deinen Nachtrag mit den Beispielen auf Stackoverflow. Werde ich mir später mal in Ruhe anschauen.

              Und ich schreibe meine Skripte mit VS Code. Javascript ist aber noch recht neu für mich, beginne nur so langsam meine Blockly Skripte zu optimieren und direkt mit JS zu schreiben.

              1 Antwort Letzte Antwort
              0
              • CodierknechtC Codierknecht

                @iphilbln sagte in Auf Änderung eines Klassen Attributs reagieren?:

                @codierknecht hmm ne das hab ich nicht vor. Dann wäre klar, dass ich die Methode komplett neu definieren müsste.
                In meinem Skript gibt es eigentlich eine Methode die für alle Klassen gleich ein Attribut setzt. Wenn sich dieses Attribut ändert, soll in der erbenden Klasse eine Methode aufgerufen werden, die sich dann aber unterscheidet. Hoffe das war verständlich?

                Eine Basisklasse sollte von ihren Nachfahren völlig unabhängig sein.
                Besondere Verhaltensweisen werden ausschließlich in den abgeleiteten Klassen definiert.
                Also wird - zumindest in "meiner" Sprache - in den abgeleiteten Klassen der Setter für die Attribute (Member) überschrieben.
                Der Setter wird in der Basisklasse als "abstract" definiert - damit muss er in den Nachfahren implementiert werden.
                Und so kann das halt in jeder Klasse anders geregelt werden.

                iPhilBlnI Offline
                iPhilBlnI Offline
                iPhilBln
                schrieb am zuletzt editiert von
                #7

                @codierknecht du spielst eher auf Java an oder? So wie ich das verstanden habe, funktioniert das bei Javascript mit Klassen im Großen und Ganzen anders als bei Java. Das Attribut der übergeordneten Klasse soll durch die erbende Klasse auch in keinster Weise beinflusst werden oder ähnliches, es soll nur auf die Änderung reagiert werden.
                Das was @OliverIO geschrieben hat, ist schon das was ich suche.

                OliverIOO 1 Antwort Letzte Antwort
                0
                • iPhilBlnI iPhilBln

                  @codierknecht du spielst eher auf Java an oder? So wie ich das verstanden habe, funktioniert das bei Javascript mit Klassen im Großen und Ganzen anders als bei Java. Das Attribut der übergeordneten Klasse soll durch die erbende Klasse auch in keinster Weise beinflusst werden oder ähnliches, es soll nur auf die Änderung reagiert werden.
                  Das was @OliverIO geschrieben hat, ist schon das was ich suche.

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von OliverIO
                  #8

                  @iphilbln
                  ne da hat @Codierknecht schon recht.
                  Die Regeln der Objektorientierung gelten für alle Programmiersprachen.
                  Aber in der praktischen Umsetzung muss das jeder selber lernen und durch Fehler auch erfahren wo das Problem liegt.
                  Deine beiden Klassen machen für mich auch nicht soviel Sinn, bzw würde ich auf so einem Detaillevel keine separaten Klassen machen, da die wiederverwendung hier nicht so groß´ist (also name könntest dann bei surename prename midname evtl noch additional names verwenden, wenn du eine klammerklasse evtl namens person oder contact hast.
                  den zusätzlichen code, den eine separate klasse benötigst, kannst du dir sparen, da du die umsetzung der Unterschiede direkt in einer Klammerklasse umsetzen kannst.
                  da hast du dann auch mehrere Attribute, mit dem du dann auf eine Änderung mit einem Event reagieren kannst.

                  darüber hinaus doppelst du in deinem beispiel die daten.
                  Am Ende ist der surname einmal in der variable surename und auch in name der basisklasse gespeichert

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  1 Antwort Letzte Antwort
                  0
                  • iPhilBlnI Offline
                    iPhilBlnI Offline
                    iPhilBln
                    schrieb am zuletzt editiert von
                    #9

                    Ja das Beispiel soll eigentlich auch nur verdeutlichen wo es grade hapert, bei so wenig Attributen würde ich jetzt prinzipiell auch keine zwei Klassen erstellen. Im eigentlichen Skript existieren aber wesentlich mehr Methoden und Attribute. Daher war eigentlich die Idee eine Oberklasse zu schreiben und nur Methoden die nicht identisch sind dann in einer erbende Klasse zu definieren.
                    @OliverIO Mir kommen aber bei deiner Antwort zwei Fragen auf.

                      1. Was sind Klammerklassen?
                      1. Wieso doppel ich meine Daten in dem Beispiel? Es existiert doch nur eine Instanz "Surname" in dem Beispiel.
                    OliverIOO CodierknechtC 2 Antworten Letzte Antwort
                    0
                    • iPhilBlnI iPhilBln

                      Ja das Beispiel soll eigentlich auch nur verdeutlichen wo es grade hapert, bei so wenig Attributen würde ich jetzt prinzipiell auch keine zwei Klassen erstellen. Im eigentlichen Skript existieren aber wesentlich mehr Methoden und Attribute. Daher war eigentlich die Idee eine Oberklasse zu schreiben und nur Methoden die nicht identisch sind dann in einer erbende Klasse zu definieren.
                      @OliverIO Mir kommen aber bei deiner Antwort zwei Fragen auf.

                        1. Was sind Klammerklassen?
                        1. Wieso doppel ich meine Daten in dem Beispiel? Es existiert doch nur eine Instanz "Surname" in dem Beispiel.
                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb am zuletzt editiert von
                      #10

                      @iphilbln

                      klammerklassen ist meine umschreibung dafür das wenn du das so fortführen würdest, dann hättest du ganz viele unterklassen für eine person.. wie geschrieben das macht in diesem beispiel nicht so viel sinn.
                      2)
                      name hat das attribut name (Zeile 8)
                      surname hat das attribut surname Zeile 23 und 29 (wobei 29 sogar nur eine blockvariable ist, die nach Aufruf von setSurname wieder vergessen wird.
                      Wenn du die Klasse surename erzeugst (Zeile 35) dann wird natürlich auch die basisklassen mit erzeugt.(surename extends name zeile 19)
                      der eine name wird durch den constructor belegt der andere durch eine methode. wie gesagt von der struktur ist das nicht alles so logisch. ich würde einfach das folgende machen

                      /*jshint esversion: 8 */
                      const events = require("events");
                      class Person{
                          constructor(name,surname){
                      
                              this.event = new events.EventEmitter();
                              this._name = name;
                              this._surename = surname;
                          }
                          set name(name) {
                              this._name=name;
                              this.event.emit("attributChanged","name",name);
                              this.event.emit("attributChangedName",name);
                           }
                          set surname(surname) {
                              this._surname=surname;
                              this.event.emit("attributChanged","surname",surname);
                              this.event.emit("attributChangedSurname",surname);
                          }
                          get name() {
                              return this._name;
                          }
                          get surname() {
                              return this._surname;
                          }
                      }
                      
                      var p = new Person("aaa","bbb");
                      p.event.on("attributChanged",(property,value)=>{
                          console.log(`${property} ${value}`);
                      });
                      
                      p.name="ccc";
                      

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      iPhilBlnI 1 Antwort Letzte Antwort
                      0
                      • iPhilBlnI iPhilBln

                        Ja das Beispiel soll eigentlich auch nur verdeutlichen wo es grade hapert, bei so wenig Attributen würde ich jetzt prinzipiell auch keine zwei Klassen erstellen. Im eigentlichen Skript existieren aber wesentlich mehr Methoden und Attribute. Daher war eigentlich die Idee eine Oberklasse zu schreiben und nur Methoden die nicht identisch sind dann in einer erbende Klasse zu definieren.
                        @OliverIO Mir kommen aber bei deiner Antwort zwei Fragen auf.

                          1. Was sind Klammerklassen?
                          1. Wieso doppel ich meine Daten in dem Beispiel? Es existiert doch nur eine Instanz "Surname" in dem Beispiel.
                        CodierknechtC Online
                        CodierknechtC Online
                        Codierknecht
                        Developer Most Active
                        schrieb am zuletzt editiert von
                        #11

                        @iphilbln sagte in Auf Änderung eines Klassen Attributs reagieren?:

                        du spielst eher auf Java an oder?

                        Java ist die dunkle Seite der Macht!
                        Nein, ich verwende in der Hauptsache Delphi. Wie @OliverIO schon schrieb: Die Regeln der Objektorientierung gelten prinzipiell für beliebige Sprachen.

                        Daher war eigentlich die Idee eine Oberklasse zu schreiben und nur Methoden die nicht identisch sind dann in einer erbende Klasse zu definieren.

                        Genau so ist es gedacht.

                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                        HmIP|ZigBee|Tasmota|Unifi
                        Zabbix Certified Specialist
                        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                        1 Antwort Letzte Antwort
                        0
                        • OliverIOO OliverIO

                          @iphilbln

                          klammerklassen ist meine umschreibung dafür das wenn du das so fortführen würdest, dann hättest du ganz viele unterklassen für eine person.. wie geschrieben das macht in diesem beispiel nicht so viel sinn.
                          2)
                          name hat das attribut name (Zeile 8)
                          surname hat das attribut surname Zeile 23 und 29 (wobei 29 sogar nur eine blockvariable ist, die nach Aufruf von setSurname wieder vergessen wird.
                          Wenn du die Klasse surename erzeugst (Zeile 35) dann wird natürlich auch die basisklassen mit erzeugt.(surename extends name zeile 19)
                          der eine name wird durch den constructor belegt der andere durch eine methode. wie gesagt von der struktur ist das nicht alles so logisch. ich würde einfach das folgende machen

                          /*jshint esversion: 8 */
                          const events = require("events");
                          class Person{
                              constructor(name,surname){
                          
                                  this.event = new events.EventEmitter();
                                  this._name = name;
                                  this._surename = surname;
                              }
                              set name(name) {
                                  this._name=name;
                                  this.event.emit("attributChanged","name",name);
                                  this.event.emit("attributChangedName",name);
                               }
                              set surname(surname) {
                                  this._surname=surname;
                                  this.event.emit("attributChanged","surname",surname);
                                  this.event.emit("attributChangedSurname",surname);
                              }
                              get name() {
                                  return this._name;
                              }
                              get surname() {
                                  return this._surname;
                              }
                          }
                          
                          var p = new Person("aaa","bbb");
                          p.event.on("attributChanged",(property,value)=>{
                              console.log(`${property} ${value}`);
                          });
                          
                          p.name="ccc";
                          
                          iPhilBlnI Offline
                          iPhilBlnI Offline
                          iPhilBln
                          schrieb am zuletzt editiert von
                          #12

                          @oliverio hmm ich weiß nicht, ob wir eventuell grade etwas aneinander vorbeireden, weil du dich sehr an meinem simplen Beispiel von oben aufhängst. Mir ging es dabei primär darum mit einem abstrakten Beispiel die generelle Funktion zu verstehen . Ich denke wir sind uns einig, dass man bei nur 2 Attributen nicht mit 2 Klassen und Vererbung arbeitet. Vielleicht kam das vorher nicht so gut rüber?
                          Mein eigentliches Skript wird meine Heizungssteuerung. Der prinzipielle Aufbau sieht dann folgende Klassen vor:

                          • class Heating
                            • alle wichtigen, grundlegenden Steuerungen und States
                          • class "Raumname" extends Heating
                            • Sonderfunktionen des jeweiligen Raums ( Nachtmodus, Aufstehen, Batteriewarnungstext, etc)

                          Daher muss die erbende Klasse ja auf Änderungen einiger Attribute der Klasse Heating reagieren, sofern ich nicht jede Methode in der erbenden Klasse neu schreiben möchte. Nichts desto trotz hast du mir den richtigen Anstoß mit dem Eventemitter geliefert, der mir das ermöglicht.

                          @Codierknecht

                          Daher war eigentlich die Idee eine Oberklasse zu schreiben und nur Methoden die nicht identisch sind dann in einer erbende Klasse zu definieren.

                          Genau so ist es gedacht.

                          Gut, dann sind wir denke ich einer Meinung. :)

                          OliverIOO 1 Antwort Letzte Antwort
                          0
                          • iPhilBlnI iPhilBln

                            @oliverio hmm ich weiß nicht, ob wir eventuell grade etwas aneinander vorbeireden, weil du dich sehr an meinem simplen Beispiel von oben aufhängst. Mir ging es dabei primär darum mit einem abstrakten Beispiel die generelle Funktion zu verstehen . Ich denke wir sind uns einig, dass man bei nur 2 Attributen nicht mit 2 Klassen und Vererbung arbeitet. Vielleicht kam das vorher nicht so gut rüber?
                            Mein eigentliches Skript wird meine Heizungssteuerung. Der prinzipielle Aufbau sieht dann folgende Klassen vor:

                            • class Heating
                              • alle wichtigen, grundlegenden Steuerungen und States
                            • class "Raumname" extends Heating
                              • Sonderfunktionen des jeweiligen Raums ( Nachtmodus, Aufstehen, Batteriewarnungstext, etc)

                            Daher muss die erbende Klasse ja auf Änderungen einiger Attribute der Klasse Heating reagieren, sofern ich nicht jede Methode in der erbenden Klasse neu schreiben möchte. Nichts desto trotz hast du mir den richtigen Anstoß mit dem Eventemitter geliefert, der mir das ermöglicht.

                            @Codierknecht

                            Daher war eigentlich die Idee eine Oberklasse zu schreiben und nur Methoden die nicht identisch sind dann in einer erbende Klasse zu definieren.

                            Genau so ist es gedacht.

                            Gut, dann sind wir denke ich einer Meinung. :)

                            OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            schrieb am zuletzt editiert von
                            #13

                            @iphilbln

                            dann ist gut

                            Meine Adapter und Widgets
                            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                            Links im Profil

                            1 Antwort Letzte Antwort
                            1
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            698

                            Online

                            32.6k

                            Benutzer

                            82.3k

                            Themen

                            1.3m

                            Beiträge
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2025
                            logo
                            • Anmelden

                            • Du hast noch kein Konto? Registrieren

                            • Anmelden oder registrieren, um zu suchen
                            • Erster Beitrag
                              Letzter Beitrag
                            0
                            • Home
                            • Aktuell
                            • Tags
                            • Ungelesen 0
                            • Kategorien
                            • Unreplied
                            • Beliebt
                            • GitHub
                            • Docu
                            • Hilfe