Ich bin verwirrt darüber, auf welche Weise ich ein Objekt in Javascript erstellen soll. Es scheint, dass es mindestens zwei Möglichkeiten gibt. Eine besteht darin, die Objektliteralnotation zu verwenden, während die andere Konstruktionsfunktionen verwendet. Gibt es einen Vorteil gegenüber dem anderen?
javascript
Chobo
quelle
quelle
Antworten:
Wenn Sie kein Verhalten mit einem Objekt verknüpft haben (dh wenn das Objekt nur ein Container für Daten / Status ist), würde ich ein Objektliteral verwenden.
Wenden Sie das KISS-Prinzip an . Wenn Sie nichts anderes als einen einfachen Datencontainer benötigen, verwenden Sie ein einfaches Literal.
Wenn Sie Ihrem Objekt Verhalten hinzufügen möchten, können Sie mit einem Konstruktor dem Objekt während der Erstellung Methoden hinzufügen oder Ihrer Klasse einen Prototyp geben.
Eine Klasse wie diese verhält sich auch wie ein Schema für Ihr Datenobjekt: Sie haben jetzt eine Art Vertrag (über den Konstruktor), welche Eigenschaften das Objekt initialisiert / enthält. Ein freies Literal ist nur ein amorpher Datenklumpen.
Sie können auch eine externe
verify
Funktion haben, die auf ein einfaches altes Datenobjekt wirkt:Dies ist jedoch im Hinblick auf die Kapselung nicht günstig: Idealerweise sollten alle Daten + Verhaltensweisen, die mit einer Entität verbunden sind, zusammenleben.
quelle
this.fn = function ...
Ansatz in einem Konstruktor verwenden, verfügt jede Ihrer Objektinstanzen über eigene Kopien von Funktionen. Mit dem Prototyp-Ansatz hängen Sie jede Funktion einmal und nur einmal an: Sie werden von den Instanzen durch prototypische Vererbung vererbt.Es läuft im Wesentlichen darauf hinaus, ob Sie mehrere Instanzen Ihres Objekts benötigen oder nicht. Mit einem mit einem Konstruktor definierten Objekt können Sie mehrere Instanzen dieses Objekts haben. Objektliterale sind im Grunde Singletons mit Variablen / Methoden, die alle öffentlich sind.
quelle
Eine andere Möglichkeit, Objekte auf einheitliche Weise zu erstellen, besteht darin, eine Funktion zu verwenden, die ein Objekt zurückgibt:
Da Funktionen in JavaScript Abschlüsse sind, können wir private Variablen und Methoden verwenden und vermeiden
new
.Von http://javascript.crockford.com/private.html zu privaten Variablen in JavaScript.
quelle
Der folgende Code zeigt drei Methoden zum Erstellen eines Objekts: die Objektliteral-Syntax, einen Funktionskonstruktor und
Object.create()
. Die Objektliteral-Syntax erstellt und objektiert einfach im laufenden Betrieb. Als solches__prototype__
ist es dasObject
Objekt und hat Zugriff auf alle Eigenschaften und Methoden vonObject
. Aus Sicht des Entwurfsmusters sollte ein einfaches Objektliteral verwendet werden, um eine einzelne Dateninstanz zu speichern.Der Funktionskonstruktor hat eine spezielle Eigenschaft namens
.prototype
. Diese Eigenschaft wird zu__prototype__
allen Objekten, die vom Funktionskonstruktor erstellt wurden. Alle Eigenschaften und Methoden, die der.prototype
Eigenschaft eines Funktionskonstruktors hinzugefügt wurden, stehen allen von ihm erstellten Objekten zur Verfügung. Ein Konstruktor sollte verwendet werden, wenn Sie mehrere Instanzen der Daten benötigen oder Verhalten von Ihrem Objekt benötigen. Beachten Sie, dass der Funktionskonstruktor auch am besten verwendet wird, wenn Sie ein privates / öffentliches Entwicklungsmuster simulieren möchten. Denken Sie daran, alle gemeinsam genutzten Methoden auf zu setzen,.prototype
damit sie nicht in jeder Objektinstanz erstellt werden.Beim Erstellen von Objekten mit wird
Object.create()
ein Objektliteral als__prototype__
für die mit dieser Methode erstellten Objekte verwendet. Alle Eigenschaften und Methoden, die dem Objektliteral hinzugefügt wurden, stehen allen Objekten zur Verfügung, die durch echte prototypische Vererbung daraus erstellt wurden. Dies ist meine bevorzugte Methode.quelle
Object.create
der Funktion im Literal die Instanz eindeutig ist?Es hängt davon ab, was Sie tun möchten. Wenn Sie (halb-) private Variablen oder Funktionen in Ihrem Objekt verwenden möchten, können Sie dies mit einer Konstruktorfunktion tun. Wenn Ihr Objekt nur Eigenschaften und Methoden enthält, ist ein Objektliteral in Ordnung.
Nun ist die Methode
multiply5
inmyObj
undSomeLiteral
macht genau das Gleiche. Der einzige Unterschied besteht darin, dass myObj eine private Variable verwendet. Letzteres kann in einigen Fällen nützlich sein. In den meisten Fällen ist ein Objektliteral ausreichend und eine schöne und saubere Möglichkeit, ein JS-Objekt zu erstellen.quelle
Möchten Sie eine einzelne Instanz des Objekts für die Seite - Literal.
Möchten Sie nur Daten wie DTO-Objekte einfach übertragen? GET SET: - Literal
Möchten Sie reale Objekte mit Methodenverhalten, mehreren Instanzen erstellen - Konstruktorfunktion, Befolgen Sie die OOP-Prinzipien, Vererbung: - Konstruktorfunktionen.
Unten sehen Sie das Youtube-Video, in dem ausführlich erklärt wird, was wörtlich ist, was Konstruktorfunktionen sind und wie sie sich voneinander unterscheiden.
https://www.youtube.com/watch?v=dVoAq2D3n44
quelle
Gehen Sie mit Objektliteral, es ist konsistenter und erweitert sich besser mit der Einführung von Anfangswerten.
quelle
Wie unter https://www.w3schools.com/js/js_object_definition.asp erwähnt
Ebenfalls
quelle
Udacity Objektorientiertes JavaScript
quelle
Eigentlich können wir private Methoden in Objektliteralen haben. Betrachten Sie den folgenden Code:
Geschmackssache, aber ich bevorzuge Objektliterale, wo es möglich ist.
quelle
// Objektliteral und Objektkonstruktor
quelle