Ich benötige verschiedene Konstruktoren für meine Instanzen. Was ist ein gängiges Muster dafür?
javascript
design-patterns
oop
Codeholic
quelle
quelle
function ({ oneThing = 7, otherThing = defaultValue } = {}) { }
. B.: . Das Extra, das= {}
ich dort eingefügt habe, ist ein weiterer Trick, den ich kürzlich gelernt habe, falls Sie die Möglichkeit haben möchten, dass der Benutzer überhaupt kein Objekt übergibt und alle Standardeinstellungen verwendet.return new this();
,return new this.otherStaticFactoryFunction();
usw.)!Antworten:
JavaScript hat keine Funktionsüberladung, auch nicht für Methoden oder Konstruktoren.
Wenn sich eine Funktion je nach Anzahl und Art der Parameter, die Sie an sie übergeben, unterschiedlich verhalten soll, müssen Sie sie manuell abhören. JavaScript ruft gerne eine Funktion mit mehr oder weniger als der angegebenen Anzahl von Argumenten auf.
Sie können auch
arguments
als Array zugreifen , um weitere Argumente zu erhalten.Wenn Sie komplexere Argumente benötigen, kann es eine gute Idee sein, einige oder alle in eine Objektsuche einzufügen:
Python zeigt, wie Standard- und benannte Argumente verwendet werden können, um die meisten Anwendungsfälle praktischer und eleganter abzudecken als das Überladen von Funktionen. JavaScript, nicht so sehr.
quelle
MyObj({foo: "foo"})
PlusMyObj({bar: "bar"})
. MyObj hat zwei Konstruktoren - aber beide nehmen ein Argument, das eine Zeichenfolge ist :-)Wie findest du das?
quelle
Sie können eine Klasse mit statischen Methoden verwenden, die eine Instanz dieser Klasse zurückgeben
Mit diesem Muster können Sie mehrere Konstruktoren erstellen
quelle
Ich hatte keine Lust, es von Hand zu machen, wie in Bobince's Antwort, also habe ich das Plugin-Optionsmuster von jQuery komplett abgerissen.
Hier ist der Konstruktor:
Hier sind verschiedene Arten der Instanziierung:
Und hier ist, was das gemacht hat:
quelle
Wenn Sie die Antwort von eruciform weiter verfolgen, können Sie Ihren
new
Anruf in Ihreinit
Methode einbinden .quelle
new Foo()
und den Aufrufinit
zusammenfassen, da ich nicht auf Eigenschaften der Objekte zugreifen konnte. Ich musste rennenvar a = new Foo(); a.init_1('constructor 1');
Manchmal reichen Standardwerte für Parameter für mehrere Konstruktoren aus. Und wenn das nicht ausreicht, versuche ich, den größten Teil der Konstruktorfunktionalität in eine init-Funktion (other-params) zu packen, die anschließend aufgerufen wird. Verwenden Sie auch das Factory-Konzept, um ein Objekt zu erstellen, mit dem die anderen gewünschten Objekte effektiv erstellt werden können.
http://en.wikipedia.org/w/index.php?title=Factory_method_pattern&oldid=363482142#Javascript
quelle
Sie können Destructuring-Objekte als Konstruktorparameter in ES6 verwenden
Hier ist das Muster:
Sie können nicht mehrere Konstruktoren haben, aber Sie können Destrukturierungs- und Standardwerte verwenden, um das zu tun, was Sie wollen.
Und Sie können dies tun, wenn Sie einen 'parameterlosen' Konstruktor unterstützen möchten.
quelle
Useges:
quelle
Dies ist das Beispiel für mehrere Konstruktoren in der Programmierung in HTML5 mit JavaScript und CSS3 - Exam Ref .
quelle