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

CSS3 realisiert verschiedene grafische Effekte kleiner Pfeile

Es ist großartig, CSS zu verwenden, um verschiede...

MySQL Online-Übung zur Deadlock-Analyse

Vorwort Ich glaube, dass jeder beim Erlernen von ...

Reines CSS-Dropdown-Menü

Ergebnisse erzielen Implementierungscode html <...

So ändern Sie die Größe von Partitionen in CentOS7

Gestern habe ich jemandem bei der Installation ei...

So legen Sie die Breite und Höhe von HTML-Tabellenzellen fest

Beim Erstellen von Webseiten tritt häufig das Pro...

MySQL-Datenbankbeschränkungen und Prinzipien des Datentabellenentwurfs

Inhaltsverzeichnis 1. Datenbankbeschränkungen 1.1...

Zusammenfassung der grundlegenden allgemeinen MySQL-Befehle

Inhaltsverzeichnis Grundlegende allgemeine MySQL-...

mysql 5.7.11 winx64 anfängliche Passwortänderung

Laden Sie die komprimierte Version von MySQL-5.7....