Ergebnis 1 bis 9 von 9
Like Tree4Likes
  • 1 Post By kkapsner
  • 1 Post By kkapsner
  • 1 Post By ein schlauer
  • 1 Post By ein schlauer

Thema: Dynamisch Instanzen erstellen

  1. #1
    raised.fist ist offline Grünschnabel
    registriert
    30-01-2013
    Beiträge
    4

    Dynamisch Instanzen erstellen

    Hallo,

    Ich bin relativ neu bei JavaScript. Ich habe ein Projekt bei dem ich via AJAX call ein .json Objekt vom Server bekomme. In diesem Objekt gibt es zwei verschiedene Anlagentypen (Maschine, Transport). Diese Typen wiederrum haben einen Namen und ein Unterobjekt mit Eigenschaften.
    Ich versuche nun, aus der .json Struktur die dazugehörigen Objektinstanzen zu erzeugen, diese in einem Array abzuspeicher und als Rückgabewert zurückzugeben.
    Dies klappt leider nicht vernünftig. Wenn ich 3 Transporte und 2 Maschinen in der Liste habe werden zwar 3 Transport- und 2 Maschinen-Objekte erstellt, jedoch alle mit den selben Werten initialisiert. Sprich, auch die ersten beiden Transport-Elemente haben die Werte und den Typ wie das dritte Transport-Objekt und analog dazu die Maschinen-Objekte.

    Ich habe die .json Struktur und die Instanzen-erzeugende Funktion hier mit jsFiddle abgebildet (Das Feld "Result" bitte nicht beachten).

    Ich habe schon mehreres ausprobiert, jedoch komme ich einfach nicht zum gewünschten Erfolg. Wäre nett wenn sich jemand Erfahrenes das einmal anschauen würde...

    Vielen Dank

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.579

    AW: Dynamisch Instanzen erstellen

    Kannst du kein lauffähiges Minimalbeispiel machen, wo wir uns das live ansehen können?

    Mindesten den Code der Constuctoren bäuchten wird...
    raised.fist likes this.

  3. #3
    raised.fist ist offline Grünschnabel
    registriert
    30-01-2013
    Beiträge
    4

    Question AW: Dynamisch Instanzen erstellen

    Hallo,

    Danke für deine Antwort. Ich habe den Code der Konstruktor-funktionen in diesem jsFiddle abgebildet. Leider bekomme ich es dort nicht zum Laufen.

    Vllt noch ein Kleinigkeit zur Hierarchie:

    AnlageClient (Basisklasse)
    ElementClient (Unterklasse von AnlageClient)
    MaschineClient / TransportClient (jeweils Unterklasse von ElementClient)

    Hoffe ihr könnt mir weiterhelfen. Ich bin am verzweifeln...

    edit: So sieht der log aus: Unbenannt.PNG
    Geändert von raised.fist (31-01-2013 um 09:57 Uhr)

  4. #4
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.579

    AW: Dynamisch Instanzen erstellen

    Dein Konstruktion mit der "privaten" Variable statischeDaten und typ zusammen mit der zuweisung einer Instanz von AnlageClient an ElementClient.prototype bzw. ElementClient an die beiden anderen .prototype verursacht das Problem.
    Überleg' dir einfach mal, wieviele lokale Variablen statischeDaten bzw. typ du überhaupt im Speicher hast.

    Als Lösung müsstest du in den Konstruktoren immer auch noch den Konstruktor der Elternklasse aufrufen oder (das würde ich machen) auf diese Technik der "privaten" Variablen (sie sind nicht wirlich privat) und arbeitest mit normalen "öffentlichen" Eigenschaften - macht das Ganze viel einfacher und "normale" Klassenlogiken sind mit JS auch nicht wirklich realisierbar.
    raised.fist likes this.

  5. #5
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Dynamisch Instanzen erstellen

    Naja, privat sind sie schon, zumindest in dem Sinn, dass sie von aussen nicht zugänglich sind.

    Was aber auch ein Problem ist, ist die Zuweisung der Protoypen. Das du jedes mal dafür eine Instanz erzeugst ist schlecht. Besser ist es, wenn du es so machst:
    Code:
    ElementClient.prototype = Object.create(AnlageClient); //ElementClient erbt von AnlageClient
    Für Browser, die diese Methode nicht kennen steht beim MDN steht eine Funktin, die du einbinden kannst: https://developer.mozilla.org/en-US/.../Object/create
    Geändert von ein schlauer (01-02-2013 um 10:36 Uhr)
    raised.fist likes this.

  6. #6
    raised.fist ist offline Grünschnabel
    registriert
    30-01-2013
    Beiträge
    4

    AW: Dynamisch Instanzen erstellen

    Hi,

    Danke schonmal für die Antworten. Ich habe viel versucht in den letzten Tagen was Vererbung und Polymorphie angeht, aber nichts hat geklappt.

    Ich steh kurz vor der Verzweiflung. Ich habe recherchiert wie ein Irrer, aber jeder Artikel schreibt etwas anderes wie man es umsetzt.

    Also nochmal kurz dargestellt was ich eigentlich möchte. Vllt kann mir jemand verraten wie ich das umsetze oder ob das garnicht realisierbar ist. (Ich schreibe übringens das Programm für meine Bachelor Thesis)

    Ich brauche eine Oberklasse Element und zwei Unterklassen Transport und Maschine die Methoden und Eigenschaften von Element erben. Die geerbten Eigenschaften und Methoden in den Unterklassen sollen überschreibbar sein, ohne dass ich irgendwas in der Oberklasse mitüberschreibe. Auch möchte ich gerne "private" und "öffentliche" Eigenschaften und Methoden in den Klassen haben.
    Ich glaube Ansatz mit Object.create() ist gut und modern, jedoch weiß ich nicht es korrekt umzusetzen. Mein Programm braucht auch nicht für alte Browser kompatibel sein. Wäre wirklich nett wenn jemand die Struktur meines Vorhabens skizzieren könnte damit ich es mit Leben füllen und meine Thesis zum Erfolg führen kann.

    Habt vielen Dank!

  7. #7
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Dynamisch Instanzen erstellen

    Nach deiner Beschreibung wäre ein Möglichkeit der Umsetzung das folgende:
    Code:
    //Basisklasse
    function Element(){
       // Pseudo private Attribute
       var x = 0;
       // Accesseor
       this.x = function() { return x; }
    }
    Element.prototype = {
    add2x: function(p){
         return this.x() + p;
    }
    };
    
    function Transport(){
        Element.call(this);
    }
    Transport.prototype = Object.create(Element);
    
    function Maschine(){
        Element.call(this);
    }
    Maschine.prototype = Object.create(Element);
    "Nicht überschreibar" ist aber mit JS nicht möglich. Es ist fast alles überschreibar.
    raised.fist likes this.

  8. #8
    raised.fist ist offline Grünschnabel
    registriert
    30-01-2013
    Beiträge
    4

    AW: Dynamisch Instanzen erstellen

    Super! Hab vielen Dank für deine Antwort.

    Aber eine Kleinigkeit versteh ich davon noch nicht ganz:

    Code:
    Element.prototype = {
    add2x: function(p){
         return this.x() + p;
    }
    };
    Das bedeutet doch das dem Prototypen von Element die Funktion add2x() hinzugefügt wird, richtig?
    Macht es einen Unterschied wenn ich die Definition von add2x() mit in Element packe? Also etwa so:

    Code:
    function Element(){
       // Pseudo private Attribute
       var x = 0;
       // Accesseor
       this.x = function() { return x; }
       //
       this.add2x = function(p){
         return this.x() + p;}
    }
    Wird diese Funktion dann nicht auch an alle Unter"klassen" vererbt? Oder sehe ich gerade irgendetwas falsch? Oder was genau ist der Unterschied zwischen this.x und add2x wenn es nicht im Element steht?
    Geändert von raised.fist (02-02-2013 um 15:09 Uhr)

  9. #9
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Dynamisch Instanzen erstellen

    Das eine (add2x) ist ein prototype, wird also nur einmal deklariert und alle vererbten "Klassen" bekommen diese Eigenschaft. Das andere ist eine Methode der Instanz und wird bei jedem Konstruktoraufruf neu erzeugt (weil die "private Variabel neu erzeugt werden muss). Im Zweifel soltest du die erste Methode vorziehen, vor allem wenn es einmal viele Instanzen von einem Element geben soll. Sie ist schneller.

Ähnliche Themen

  1. [JS] Formularfelder dynamisch erstellen
    Von munich2010 im Forum Script-Check
    Antworten: 5
    Letzter Beitrag: 21-12-2010, 01:49
  2. Dynamisch Event erstellen
    Von iocast im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 24-10-2007, 09:37
  3. Kalender dynamisch erstellen
    Von schwerminator im Forum Script-Check
    Antworten: 2
    Letzter Beitrag: 30-08-2006, 23:39
  4. Auswahlliste dynamisch erstellen
    Von Clopin im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 01-08-2006, 12:09
  5. Radioboxes dynamisch erstellen
    Von afoeder im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 06-04-2005, 20:27

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •