Detaillierte Erklärung des Prinzips und Beispiel des new-Operators in JavaScript

Detaillierte Erklärung des Prinzips und Beispiel des new-Operators in JavaScript

Verwendung von neuen

Die Funktion von new besteht darin, ein Instanzobjekt über einen Konstruktor zu erstellen. Die Beziehung zwischen der Instanz, dem Prototyp und dem Konstruktor ist in der folgenden Abbildung dargestellt:

Fassen wir zunächst zusammen

  1. Erstellen Sie ein leeres Objekt
  2. Die interne Eigenschaft __proto__ des leeren Objekts wird der prototype-Eigenschaft der Konstruktorfunktion zugewiesen.
  3. Stellen Sie den Konstruktor so ein, dass er auf ein leeres Objekt zeigt.
  4. Führen Sie den Code im Konstruktor aus
  5. Das neue Objekt zurückgeben

Detaillierte Beschreibung

Bei der Ausführung der neuen Operation werden folgende Schritte nacheinander ausgeführt:

1. Erstellen Sie ein leeres Objekt

  • Das leere Objekt ist eine Instanz von Object, d. h. {}.
let obj = {}

2. Die interne Eigenschaft __proto__ des leeren Objekts wird der prototype-Eigenschaft des Konstruktors zugewiesen

  • Dieser Vorgang dient dazu, das leere Objekt mit dem richtigen Prototyp zu verknüpfen
Funktion Foo(Zahl) {
  diese.Nummer = Nummer
}

obj.__proto__ = Foo.prototyp

3. Zeigen Sie mit this des Konstruktors auf ein leeres Objekt

  • Das heißt, this wird innerhalb des Konstruktors einem leeren Objekt zugewiesen, damit der Konstruktor später korrekt ausgeführt werden kann.
Foo.call(Objekt, 1)

4. Führen Sie den Code im Konstruktor aus

  • Das heißt, fügen Sie dem leeren Objekt Eigenschaften und Methoden hinzu.

5. Geben Sie das neue Objekt zurück

  • Wenn durch die return-Anweisung im Konstruktor ein Wert vom Referenztyp zurückgegeben wird, gibt die neue Operation letztendlich diesen Wert vom Referenztyp zurück, andernfalls gibt sie das neu erstellte Objekt zurück.
  • Referenztypwerte: alle Werte außer Werten des primitiven Typs (Zahlen, Zeichenfolgen, Boolesche Werte, Null, undefiniert und Symbolwerte).

Emulieren des neuen Operators

Die folgende myNew-Funktion simuliert das Verhalten des neuen Operators:

Funktion meinNeu(func, ...args) {
  let obj = {}
  obj.__proto__ = Funktion.Prototyp
  let res = func.apply(obj, args)
  Gibt eine res-Instanz des Objekts zurück? res: obj
}

Funktion Foo(Zahl) {
  diese.Nummer = Nummer
}

lass foo1 = meinNeues(Foo, 1)
console.log(foo1 Instanz von Foo) // wahr
konsole.log(foo1.Nummer) // 1

lass foo2 = neues Foo(2)
console.log(foo2 Instanz von Foo) // wahr
console.log(foo2.Nummer) // 2

Der Operator instanceof wird oben verwendet, um zu bestimmen, ob der Rückgabewert des Konstruktors eine Instanz von Object ist, dh ob es sich um einen Referenztypwert handelt. Dies liegt daran, dass alle Referenztypwerte Instanzen von Object sind und Object der Basistyp aller Referenztypwerte ist.

Damit ist dieser Artikel über das Prinzip des neuen Operators in JavaScript zu Ende. Weitere relevante Inhalte zum Prinzip des neuen Operators in JS finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Lassen Sie uns ausführlich über das Prinzip und die Implementierung von new in JS sprechen
  • Detaillierte Beschreibung der Funktion von new in JS
  • Untersuchung von zwei Möglichkeiten zur Implementierung von „new“ in JavaScript
  • So implementieren Sie den neuen Operator von JavaScript selbst
  • Detaillierte Erklärung der Rolle des neuen Operators in Js
  • Zusammenfassung gängiger Methoden von C# Newtonsoft.Json
  • C# Newtonsoft.Json analysiert mehrere verschachtelte JSON-Dateien für ein Deserialisierungsbeispiel
  • c#: Newtonsoft.Json-Paketvorgang hinzufügen
  • Der neue Befehl in JavaScript
  • Handschriftliche Implementierung von new in JS

<<:  Erstellen Sie eine virtuelle Umgebung mit venv in Python3 in Ubuntu

>>:  Schritte zum Installieren von Superset unter dem Win10-System

Artikel empfehlen

Detaillierte Erklärung der JavaScript-Funktion dieses Zeigeproblems

Inhaltsverzeichnis 1. Die Richtung davon in der F...

Umfassendes Verständnis der Überwachung von HTML-Formulareingaben

Heute habe ich einen Blogbeitrag über Eingabeerei...

js und jquery, um einen Tab-Statusleisten-Umschalteffekt zu erzielen

Heute werden wir einen einfachen Fall durchgehen ...

Linux Überprüfen Sie den Installationsort der Software einfache Methode

1. Überprüfen Sie den Installationspfad der Softw...

Verwendung des Linux-Befehls usermod

1. Befehlseinführung Der Befehl usermod (user mod...

Durchführung der lokalen Migration von Docker-Images

Ich habe vor Kurzem Docker gelernt und stoße dabe...

Detaillierte Beispiele für Variablen- und Funktionspromotion in JavaScript

js-Ausführung Phase der lexikalischen Analyse: um...

Installation von CUDA10.0 und Probleme in Ubuntu

Die Entsprechung zwischen der Tensorflow-Version ...

So zeigen Sie die Netzwerkroutingtabelle in Ubuntu an

Was sind Routing und Routing-Tabellen in Linux? U...

Eine kurze Diskussion über den CSS-Kaskadierungsmechanismus

Warum hat CSS einen Kaskadierungsmechanismus? Da ...

Ungültige Lösung beim Definieren mehrerer Klassenattribute in HTML

Beim Schreiben von HTML definieren wir häufig mehr...

Grafisches Tutorial zur Installation der dekomprimierten Version von mysql5.7.14

MySQL ist in Community Edition (Community Server)...