2017-07-07 4 views
2

Ich habe eine JavaScript-Frage. Stellen Sie sich einen virtuellen Stift vor. Es gibt viele verschiedene mögliche Federn, die der Stift haben kann, obwohl der Stift nur eine Feder haben kann. Ich möchte ein Stiftobjekt erstellen und ihm dann eine Schreibfeder zuweisen. Die Feder muss auf die Eigenschaften und Methoden des Stiftes zugreifen.JavaScript Stift Objekte mit austauschbaren Nibs

Dies ist wahrscheinlich ein bekanntes Design-Muster. Wie heißt dieses Designmuster?

function Pen() { 
    var p1=5; 
    this.nib=null; 
} 

function Nib1() { 
    // needs access to p1. 
} 

function Nib2() { 
    // needs access to p1. 
} 

var p = new Pen(); 
var n1 = new Nib1(); 
p.nib = n1; 
// n1 needs access to p1 
+1

Ich glaube wirklich, dass es kein solches Muster gibt, weil es überhaupt kein gutes Design ist. Wenn überhaupt, würde ich dies als Antipattern betrachten. Es erzeugt zirkuläre Abhängigkeiten zwischen diesen Klassen (weil Sie sagen, Nib benötigt Zugriff auf Pen, aber warum?), Was immer eine schlechte Sache ist. Dinge wie Strategie Muster sollen solche Probleme angehen. –

+1

Was meinst du mit "benötigt Zugriff auf p1", ist der Zugriff in der Regel unidirektional, um eine zirkuläre Abhängigkeit zu vermeiden (https://en.wikipedia.org/wiki/Circular_dependency). Vielleicht würden Ihnen diese Gedanken zu OOP-Konzepten helfen? (http://www.adobe.com/devnet/actionscript/learning/oop-concepts/composition-and-aggregation.html oder https://stackoverflow.com/questions/2218937/has-a-is-a-terminology -in-object-oriented-language) Ich habe das Gefühl, dass Sie nur nach "Composition" suchen, wo Pen eine Nib hat, und Nib hängt von einigen Informationen ab, die Pen in Nibs Funktionen übergibt. –

+0

Ich bin nicht sicher, ob Sie eine seltsame Analogie machen oder Sie möchten einen Stift in js erstellen. Normalerweise möchten Sie sich von dieser Art von Co-abhängiger Beziehung fernhalten ... versuchen Sie, die funktionale Programmierung und das Schließen zu betrachten. Es ist eine solide Möglichkeit, JS zu verwenden. Wenn man die gesamte OOP-Route mit JS hinuntergeht, kann es ziemlich schnell unordentlich werden. –

Antwort

0

Es klingt ein bisschen wie die Verwendung eines Konstruktors. Dieses Kapitel beschreibt eine ähnliche Situation, aber mit Kaninchen anstelle von Stiften: http://eloquentjavascript.net/06_object.html#constructors.

würde der Stift der Konstruktor sein:

function Pen(nib) { 
    // shared scope 
    this.nib = nib; 
} 

Dann können Sie

var bluePen = new Pen(blue) 

schaffen ... Obwohl ich es etwas anders denke, weil Sie einen einzelnen Stift und mit dem Konstruktor beschreiben sind Sie können mit mehreren Instanzen enden.