2017-05-27 4 views
0

ich von Constructor2 eine Eigenschaft in Constructor1 (property1) verweisen möchten, und ich dachte, es war in Ordnung, indem Sie diese ... oder sollte ich Nest die constructor2 innerhalb der constructor1 ?Js: Wie Referenz> Eigenschaft Konstruktor aus einem anderen Konstruktor

var Constructor2 = function() { 
    this.method2 = function() { 
     // how to reference Constructor1.property ??? 
    }; 
}; 

var Constructor1 = function() { 

    this.property1 = true; 
    this.property2 = false; 

    this.method1 = new Constructor2(); 
}; 

var inst = new Constructor1(); 

inst.method1.method2(); 
+0

Ist 'GForce 'das gleiche wie' Constructor2'? – Bergi

+0

Sie müssen das 'inst' als Argument an die' Methode2' übergeben oder einen Verweis darauf aus dem Konstruktor von 'method1' erstellen. – Bergi

+1

Die Methode ist überhaupt nicht im Konstruktor. Es ist auf den Instanzen, die es zurückgibt. 'this' verweist nicht auf den Konstruktor, sondern auf das Objekt, das beim Aufruf von' new Constructor1() 'zurückgegeben wird. –

Antwort

0

Dies scheint ein Beispiel für das Delegationsmuster.

Ihr "Klasse" -Konstruktor1 delegiert einen Teil seiner Logik an den "Klasse" -Konstruktor2.

Constructor2 braucht, um die Eigenschaften des delegator zuzugreifen und dies kann Geben eine Instanz des delegator zu den Delegierten erfolgen:

var Constructor2 = function(delegator) { 
    this.delegator = delegator; 
    this.method2 = function() { 
     console.log(delegator.property1); 
    }; 
}; 

var Constructor1 = function() { 

    this.property1 = true; 
    this.property2 = false; 

    this.method1 = new Constructor2(this); 
}; 

var inst = new Constructor1(); 

inst.method1.method2(); 

Ich denke, dass es besser wäre, Constructor1 und Constructor2 nicht als Erbauer zu betrachten aber als Klassen. Ich verstehe, dass sie Funktionen sind und dass sie verwendet werden, um Objekte zu erstellen, aber normalerweise erhalten sie den Namen der Klasse, die sie instanziieren.

+0

Danke für die Antwort. Jetzt werde ich fragen ... ist das ein guter Weg das zu tun? Warum sollte man 'Constructor2' nicht in' Constructor1' setzen? –

+0

Ich denke, wenn Constructor2 nur als Teil von Constructor1 lebt, kann es Sinn machen, was Sie vorschlagen. –

Verwandte Themen