OOP: Objekt-Erzeugung "verzögern" und mit Parameter erweitern

GiuseppeS

New member
Hallo zusammen,

leider komme ich selbst auf keine Lösung und hoffe hier auf Hilfe. Die Problembeschreibung ist schon schwierig, daher eine Erläuterung:

Ich habe eine Class Liste (= Doubly Linked List) die mit den einzelnen Objekten ListNode befüllt wird.
ListNode enthält zwei für dieses Problem relevante Attribute UID (= eindeutige ID) und Ref (= Referenz zu einem weiteren Objekt, hier Child).

Ziel ist es, das die erzeugte UID vom direkten Listenobjekt ListNode auch für die Erzeugung des Child-Objekts genutzt wird. D.h.: Sowohl das Listenobjekt als auch seine Referenz sollen dieselbe UID bekommen.

Das war mein erster Gedanke, aber die Objekterstellung erfolgt zu früh, daher ist die UID vom ListNode noch nicht bekannt:

Code:
class ListNode {
    constructor( Obj) {
        this.prev = null;
        this.next = null;
        this.UID = this.getUID();
        this.Ref = Obj;
    }

    getUID() { return "generated-UID" }
}

class Child {
    constructor( UID) {
        this.UID = UID;
    }
}


let tmp = new ListNode( new Child() ); // hier wird bereits das Child-Object erzeugt, daher kann im Konstruktor von ListNode die UID nicht mehr hinzugefügt werden


Hier der zweite Versuch:
Wollte die Erzeugung des Child-Objects innerhalb des Konstruktors von ListNode durchführen. Aber this.Ref beinhaltet dann keine Referenz auf das Child-Object, somit ist dann ein Zugriff von der Liste auf das Child-Object nicht möglich. Oder mache ich hier grundätzlich etwas falsch?

Code:
class ListNode {
    constructor( cb) {
        this.prev = null;
        this.next = null;
        this.UID = this.getUID();
        this.Ref = cb( this.UID);
    }

    getUID() { return "generated-UID" }
}

class Child {
    constructor( UID) {
        this.UID = UID;
    }
}

function cb( UID){ return new Child( UID) };

let tmp = new ListNode( cb );

console.log( tmp.Ref.UID); // -> undefined
console.log( tmp.Ref.constructor.name); // -> Function

Habe schon überlegt die UID innerhalb des Child-Obj zu generieren und innerhalb der Liste greife ich dann nicht mit this.UID sondern mit this.Ref.UID zu. Aber allgemein wüsste ich gerne wie ich das beschriebene Problem löse; so lerne ich zumindest dazu. Die Klasse "Child" dient hier nur als Pseudonym für verschiedene Klassen, die ich verwende. Die Überlegung, das Child-Objekt direkt als ListNode zu verwenden hatte ich auch schon, aber ein Sortier-Algorythmus müsste dann mehrere Attribute switchen, statt nur eine einzelne Referenz.
 
Zurück
Oben