Objektorientiertes JavaScript (OOJS) 3 Möglichkeiten, Objektinstanzen zu erstellen
Wenn eine Programmiersprache ist Alles über Objekte, Das erste, was wir lernen müssen, ist So erstellen Sie Objekte. Das Erstellen von Objekten in JavaScript ist ziemlich einfach: ein Paar geschweifte Klammern wird die Arbeit jedoch tun, das ist weder der einzige Weg ein Objekt erstellen noch der einzige Weg Sie müssen jemals verwenden.
In JavaScript sind Objektinstanzen aus integrierten Objekten erstellt und zur Existenz kommen, wenn das Programm läuft. Zum Beispiel, Datum
ist ein eingebautes Objekt, das Informationen zu Datumsangaben enthält. Wenn wir das aktuelle Datum auf einer Seite anzeigen möchten, werden wir brauche eine Laufzeitinstanz von Datum
das enthält die Informationen über das aktuelle Datum.
JavaScript erlaubt es uns auch Definiere unsere eigenen Objekte das kann zur Laufzeit eigene Objektinstanzen erzeugen. In JavaScript, alles ist ein objekt und jedes Objekt hat ein ultimativer Vorfahre namens Objekt
. Die Erstellung einer Objektinstanz wird aufgerufen Instantiation.
1. Die Neu
Operator
Eine der bekanntesten und bekanntesten Methoden zum Erstellen einer neuen Objektinstanz ist by Verwendung der Neu
Operator.
Du brauchst ein Konstrukteur das machen Neu
Bedienerarbeit. Ein Konstruktor ist eine Methode eines Objekts, die a zusammenfügt neue Instanz dieses Objekts. Ihre grundlegende Syntax sieht folgendermaßen aus:
neuer Konstruktor ()
Ein Konstruktor kann Argumente annehmen Dies kann verwendet werden, um der von ihr erstellten Objektinstanz Eigenschaften zu ändern oder hinzuzufügen. Der Konstruktor hat den gleichen Namen als Objekt gehört es dazu.
Hier ist ein Beispiel, wie ein erstellt wird Beispiel der Datum()
Objekt mit dem Neu
Stichwort:
dt = new Datum (2017, 0, 1) console.log (dt) // So Jan 01 2017 00:00:00 GMT + 0100
Datum()
ist der Konstruktor, um ein neues zu erstellen Datum
Objekt. Unterschiedliche Konstruktoren für ein Objekt nehmen Sie unterschiedliche Argumente um dieselbe Art von Objektinstanzen mit verschiedene Attribute.
Nicht alle in JavaScript integrierten Objekte können wie instanziiert werden Datum
. Es gibt Objekte, die Komm nicht mit einem Konstruktor: Mathematik
, JSON
und Reflektieren
, aber sie sind immer noch gewöhnliche Objekte.
Unter den eingebauten Objekten, die über Konstruktoren verfügen, Symbol
kann nicht im Konstruktorstil aufgerufen werden ein neues instanziieren Symbol
Beispiel. Es kann nur sein als Funktion aufgerufen was ein neues zurückgibt Symbol
Wert.
Unter den eingebauten Objekten, die über Konstruktoren verfügen, müssen nicht alle ihre Konstruktoren mit dem Aufruf von aufgerufen werden Neu
Operator, um instanziiert zu werden. Funktion
, Array
, Error
, und RegExp
kann auch als Funktionen aufgerufen werden, ohne die Neu
Schlüsselwort, und sie werden instanziiert und geben eine neue Objektinstanz zurück.
2. Die Reflektieren
Objekt
Backend-Programmierer sind möglicherweise bereits vertraut Reflexions-APIs. Reflexion ist eine Funktion von Programmiersprachen einige der grundlegenden Entitäten prüfen und aktualisieren, wie Objekte und Klassen, zur Laufzeit.
In JavaScript konnten Sie bereits durchführen etwas Reflexionsoperationen mit Objekt
. Aber a richtige Reflection-API schließlich auch in JavaScript zu existieren.
Das Reflektieren
Objekt hat eine Reihe von Methoden Objektinstanzen erstellen und aktualisieren. Das Reflektieren
Objekt hat keinen Konstruktor, es kann also nicht mit dem instanziiert werden Neu
Operator und, wie Mathematik
und JSON
, es kann nicht als Funktion aufgerufen werden entweder.
jedoch, Reflektieren
hat eine Äquivalent des Neu
Operator: das Reflect.construct ()
Methode.
Reflect.construct (target, argumentsList [, newTarget])
Beide Ziel
und die optional Neues Ziel
Argumente sind Objekte mit eigenen Konstrukteuren, während ArgumenteListe
ist ein Liste der Argumente an den Konstruktor von übergeben werden Ziel
.
var dt = Reflect.construct (Datum, [2017, 0, 1]); console.log (dt); // So Jan 01 2017 00:00:00 GMT + 0100
Der Code oben hat den gleichen Effekt als instantiierend Datum()
Verwendung der Neu
Operator. Obwohl Sie noch verwenden können Neu
, Reflexion ist eine ECMAScript 6-Standard. Es erlaubt Ihnen auch nutzen Sie die Neues Ziel
Streit, Das ist ein weiterer Vorteil gegenüber dem Neu
Operator.
Der Wert von Neues Ziel
's Prototyp (um genau zu sein, es ist der Prototyp von Neues Ziel
Konstruktor) wird zum Prototyp der neu erstellten Instanz.
Ein Prototyp ist das Eigenschaft eines Objekts, deren Wert ist auch ein Objekt, die Eigenschaften des ursprünglichen Objekts tragen. Kurz gesagt, ein Objekt erhält seine Mitglieder von seinem Prototyp.
Hier ein Beispiel:
Klasse A Konstruktor () this.message = Funktion () Konsole.log ('Nachricht von A') Klasse B Konstruktor () Nachricht () Konsole.log ('Nachricht von B') data () console.log ('data from B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // Nachricht von A console.log (obj.data ()); // Daten aus B console.log (obj Instanz von B) // wahr
Durchgehen B
als drittes Argument an Reflect.construct ()
, der Prototypwert des obj
Objekt ist gemacht, um gleich zu sein als der Prototyp von B
Konstruktor (der die Eigenschaften hat) Botschaft
und Daten
).
Somit, obj
kann auf das zugreifen Botschaft
und Daten
, erhältlich bei seinem Prototyp. Aber seit obj
erfolgt mit EIN
, es hat auch ein eigenes Botschaft
es erhalten von EIN
.
Obwohl obj
als Array aufgebaut ist, ist es keine Instanz von Array
, weil sein Prototyp eingestellt ist Objekt
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj-Instanz von Array) // false
Reflect.construct ()
kann nützlich sein, wenn Sie ein Objekt erstellen möchten mit mehr als einem Bauplan.
3. Die Object.create ()
Methode
Sie können auch eine erstellen neues gewöhnliches Objekt mit einem bestimmten Prototyp über Object.create ()
. Auch dies mag der Verwendung von Neu
Betreiber, aber es ist nicht.
Object.create (O [, propertiesObject])
Das O
Argument ist ein Objekt das dient dem Prototyp für das neue Objekt, das erstellt wird. Die Wahl propertiesObject
Argument ist ein Liste der Eigenschaften Vielleicht möchten Sie das neue Objekt hinzufügen.
class A constructor () message () console.log ('message from A') var obj = Object.create (neues A (), data: schreibbar: wahr, konfigurierbar: wahr, Wert: function () return 'data from obj') console.log (obj.message ()) // Nachricht von A console.log (obj.data ()) // Daten von obj obj1 = Object.create ( new A (), foo: schreibbar: true, konfigurierbar: true, value: function () return 'foo from obj1') console.log (obj1.message ()) // Nachricht von einer Konsole. log (obj1.foo ()) // foo von obj1
In dem obj
Objekt ist die hinzugefügte Eigenschaft Daten
, während in obj1
, es ist foo
. Wie Sie sehen, können wir also haben Eigenschaften und Methoden, die einem neuen Objekt hinzugefügt werden.
Dies ist großartig, wenn Sie erstellen möchten mehrere Objekte derselben Art aber mit verschiedene ergänzende Eigenschaften oder Methoden. Das Object.create ()
Syntax erspart die Mühe, sie alle separat zu codieren.