Da Ihr Problem hauptsächlich stilistisch ist (Sie möchten den Konstruktor nicht mit einer Reihe von Deklarationen füllen), kann es auch stilistisch gelöst werden.
So wie ich es sehe, ist der Konstruktor in vielen klassenbasierten Sprachen eine Funktion, die nach dem Klassennamen selbst benannt ist. Stilistisch könnten wir das verwenden, um eine ES6-Klasse zu erstellen, die stilistisch immer noch sinnvoll ist, aber die typischen Aktionen, die im Konstruktor stattfinden, nicht mit allen Eigenschaftsdeklarationen gruppiert, die wir ausführen. Wir verwenden einfach den eigentlichen JS-Konstruktor als "Deklarationsbereich" und erstellen dann eine Klasse mit dem Namen "Funktion", die wir ansonsten als "Bereich für andere Konstruktoren" behandeln, und rufen sie am Ende des wahren Konstruktors auf.
"benutze streng";
Klasse MyClass
{
// deklariere nur deine Eigenschaften und rufe dann this.ClassName () auf; von hier
Konstrukteur(){
this.prop1 = 'bla 1';
this.prop2 = 'bla 2';
this.prop3 = 'bla 3';
this.MyClass ();
}}
// alle möglichen anderen "Konstruktor" -Stücke, die nicht mehr mit Deklarationen durcheinander sind
Meine Klasse() {
mach was auch immer();
}}
}}
Beide werden aufgerufen, wenn die neue Instanz erstellt wird.
Sorta mag es, zwei Konstruktoren zu haben, in denen Sie die Deklarationen und die anderen Konstruktoraktionen, die Sie ausführen möchten, trennen, und macht es stilistisch nicht allzu schwer zu verstehen, dass dies auch der Fall ist.
Ich finde, es ist ein guter Stil, wenn man sich mit vielen Deklarationen und / oder vielen Aktionen befasst, die bei der Instanziierung ausgeführt werden müssen, und wenn man die beiden Ideen voneinander unterscheiden möchte.
HINWEIS : Ich verwende sehr absichtlich nicht die typischen Redewendungen des "Initialisierens" (wie eine init()
oder initialize()
Methode), da diese oft unterschiedlich verwendet werden. Es gibt eine Art vermuteten Unterschied zwischen der Idee des Konstruierens und Initialisierens. Menschen, die mit Konstruktoren arbeiten, wissen, dass sie im Rahmen der Instanziierung automatisch aufgerufen werden. Wenn Sie eine init
Methode sehen, gehen viele Leute ohne einen zweiten Blick davon aus, dass sie etwas in der Form von tun müssen var mc = MyClass(); mc.init();
, denn so initialisieren Sie normalerweise. Ich bin nicht einen Initialisierungsprozess hinzufügen für den Benutzer der Klasse versucht, ich versuche zu addieren , um den Bauprozess der Klasse selbst.
Während einige Leute für einen Moment ein Double-Take machen, ist das eigentlich der springende Punkt: Es teilt ihnen mit, dass die Absicht Teil der Konstruktion ist, auch wenn sie dadurch ein bisschen Double-Take-and-Go machen "das ist nicht der Fall Wie ES6-Konstruktoren funktionieren "und nehmen Sie sich einen zweiten Blick auf den eigentlichen Konstruktor, um zu sagen" Oh, sie nennen es unten, wie ich sehe ", das ist weitaus besser, als diese Absicht NICHT zu kommunizieren (oder sie falsch zu kommunizieren) und wahrscheinlich viel davon zu bekommen Leute, die es falsch benutzen und versuchen, es von außen und Junk zu initialisieren. Das ist sehr beabsichtigt für das Muster, das ich vorschlage.
Für diejenigen, die diesem Muster nicht folgen möchten, kann auch das genaue Gegenteil funktionieren. Führen Sie die Deklarationen zu Beginn an eine andere Funktion aus. Nennen Sie es vielleicht "Eigenschaften" oder "publicProperties" oder so. Dann legen Sie den Rest des Materials in den normalen Konstruktor.
"benutze streng";
Klasse MyClass
{
Eigenschaften() {
this.prop1 = 'bla 1';
this.prop2 = 'bla 2';
this.prop3 = 'bla 3';
}}
Konstrukteur() {
this.properties ();
mach was auch immer();
}}
}}
Beachten Sie, dass diese zweite Methode möglicherweise sauberer aussieht, aber auch ein inhärentes Problem aufweist, bei dem properties
eine Klasse, die diese Methode verwendet, eine andere erweitert. Sie müssten eindeutigere Namen angeben, um dies properties
zu vermeiden. Meine erste Methode hat dieses Problem nicht, da die gefälschte Hälfte des Konstruktors eindeutig nach der Klasse benannt ist.
this.member = member
bei Ihrem Konstruktor eine Wiederholung mit 20-30 Parametern haben?