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

Zusammenfassung des Wissens zu MySQL-Sperren

Sperren in MySQL Sperren sind ein Mittel, um Ress...

border-radius ist eine Methode zum Hinzufügen abgerundeter Ränder zu Elementen

border-radius:10px; /* Alle Ecken sind mit einem ...

So setzen Sie das Root-Passwort in Linux mysql-5.6 zurück

1. Überprüfen Sie, ob der MySQL-Dienst gestartet ...

vue.js Router verschachtelte Routen

Vorwort: Manchmal ist der Hauptteil einer Route d...

Der Prozess der Installation von SVN auf Ubuntu 16.04.5LTS

Dieser Artikel stellt kurz den Prozess der Einric...

Was ist WML?

WML (Wireless Markup Language). Es handelt sich u...

Lösen Sie das Problem der blockierenden Positionierungs-DDL in MySQL 5.7

Im vorherigen Artikel „Änderungen der MySQL-Tabel...

Eine kurze Erläuterung der $notify-Punkte des Elements

Meine ursprüngliche Absicht war, die $notify-Bena...

Wie MySQL implizite Standardwerte verarbeitet

Einige Studenten sagten, dass sie auf das Problem...

Uniapp implementiert Beispielcode für die Anmeldung mit DingTalk-Scancode

Da Uniapp nicht über eine autorisierte DingTalk-A...

Erläuterung der Methode zum Schreiben von SQL-Anweisungen zum Einfügen

Methode 1: INSERT INTO t1(Feld1,Feld2) VALUE(v001...

Beispielcode für HTML-Formularkomponente

HTML-Formulare werden verwendet, um verschiedene ...