Startseite » Codierung » Objektorientiertes JavaScript (OOJS) 3 Möglichkeiten, Objektinstanzen zu erstellen

    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 ZielKonstruktor) 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 BKonstruktor (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.