isPrototypeOf-Funktion in JavaScript

isPrototypeOf-Funktion in JavaScript

Manchmal stößt man beim Betrachten des Framework-Quellcodes auf isPrototypeOf() . Was macht diese Funktion also?

1. istPrototyp von()

isPrototypeOf() ist eine Methode der Object -Funktion (Klasse), die verwendet wird, um zu bestimmen, ob das aktuelle Objekt der Prototyp eines anderen Objekts ist. Wenn ja, gibt sie true zurück, andernfalls false .

Der Schlüssel zum Verständnis dieser Funktion liegt in der Prototypenkette, die als einer der drei großen Berge von JavaScript gilt.

Die Grundsätze werden hier nicht im Detail beschrieben, aber vereinfacht ausgedrückt handelt es sich um drei Punkte:

  • 1. Funktionsobjekte werden mit einer prototype geboren.
  • 2. Jedes Objekt wird auch mit einer Eigenschaft __proto__ geboren, die auf prototype des Funktionsobjekts verweist, das es generiert.
  • 3. prototype eines Funktionsobjekts hat auch __proto__ das auf prototype des Funktionsobjekts verweist, das ihn generiert hat.

Beispiel 1, Instanz der Objektklasse:

lass o = neues Objekt();
console.log(Object.prototype.isPrototypeOf(o)); // wahr


Da das o Objekt eine Instanz von Object ist, zeigt der Prototyp (__proto__) des o-Objekts auf den Prototyp ( prototype ) von Object , und oben wird „true“ ausgegeben.

Beispiel 2: Definieren Sie die Klasse Human selbst:

Funktion Mensch() {}
lass Mensch = neuer Mensch();
 
console.log(Mensch.prototype.isPrototypeOf(Mensch)); // wahr


Dieses Beispiel ist dem vorherigen ähnlich. Da das human -Objekt eine Instanz von Human ist, zeigt der Prototyp des human -Objekts (__proto__) auf den Prototyp von Human ( prototype ), und das obige Beispiel gibt true aus.

Beispiel 3: Sehen wir uns an, ob der Prototyp des Objekts der Prototyp des Menschen ist:

console.log(Objekt.prototype.isPrototypeOf(Mensch)); // wahr


Warum? , was mit Code besser erklärt werden kann, siehe die folgende Ableitung:

// Weil der Prototyp (__proto__) im Prototyp (Prototyp) des Menschen auf den Prototyp (Prototyp) des Objekts verweist
Mensch.prototyp.__proto__ === Objekt.prototyp
// Und weil der Prototyp des Menschen (__proto__) auf den Prototyp des Menschen (Prototyp) verweist
huamn.__proto__ === Mensch.prototyp
// Der Prototyp des menschlichen Objekts (__proto__) zeigt also auf den Prototyp des Objekts (Prototyp).
huamn.__proto__.__proto__ === Objekt.prototyp


Dies ist leicht zu verstehen, wenn man sich die Struktur des Menschen ansieht:

Ist also prototype des Object der Prototyp des human Objekts? Um genau zu sein, befindet sich prototype des Object in der Prototypkette des human .

Beispiel 4, ob Object.prototype der Prototyp einer integrierten Klasse ist:

Die integrierten Klassen Number , String , Boolean , Function Array in JavaScript erben alle Object , daher sind die folgenden Ausgaben alle true :

console.log(Objekt.prototype.isPrototypeOf(Zahl)); // wahr
console.log(Object.prototype.isPrototypeOf(String)); // wahr
console.log(Object.prototype.isPrototypeOf(Boolean)); // wahr
console.log(Object.prototype.isPrototypeOf(Array)); // wahr
console.log(Objekt.prototype.isPrototypeOf(Funktion)); // wahr


Natürlich ist Object.prototype auch der Prototyp von Instanzen von Number , String , Boolean , Function und Array .

Beispiel 5, Objekt ist auch eine Funktion (Klasse):

Erwähnenswert ist auch, dass Function.prototype auch der Prototyp von Object ist, da Object auch eine Funktion (Klasse) ist und sie sich gegenseitig generieren.

Bitte sehen Sie sich die folgende Ausgabe an:

console.log(Objekt.prototype.isPrototypeOf(Funktion)); // wahr
console.log(Funktion.prototype.isPrototypeOf(Objekt)); // wahr

2. Unterschied zu instanceof

instanceof wird verwendet, um zu bestimmen, ob ein Objekt eine Instanz eines Objekts ist.

Zum Beispiel:

Funktion Mensch() {}
lass Mensch = neuer Mensch();
 
// human ist eine Instanz von Human, daher ist die Ausgabe true
console.log(menschliche Instanz von Mensch); // wahr
 
// Da alle Klassen Object erben, gibt das Ergebnis auch true aus
console.log(menschliche Instanz des Objekts); // wahr
 
// Da das menschliche Objekt kein Array ist, ist die Ergebnisausgabe falsch
console.log(menschliche Instanz von Array); // falsch


Hier sind einige weitere Beispiele für integrierte Klassen:

// [1,2,3] ist eine Instanz von Array, daher ist die Ausgabe wahr
console.log([1, 2, 3] Instanz von Array); // wahr
 
// Die Methode function(){} ist eine Instanz von Function und gibt daher true aus.
console.log(function(){} Instanz der Funktion);


Das Prinzip von instanceof besteht darin, zu bestimmen, ob das Prototypobjekt (Prototyp) der Klasse in der Prototypkette der Instanz gefunden werden kann, während isPrototypeOf bestimmt, ob sich das Prototypobjekt ( prototype ) der Klasse in der Prototypkette der Instanz befindet.

Nach meinem Verständnis haben diese beiden Ausdrücke dieselbe Bedeutung, werden aber unterschiedlich geschrieben. Die folgenden beiden Ausgaben sollten gleich sein:

console.log(Eine Instanz von B);
Konsole.log(B.prototype.isPrototypeOf(A));


Zusammenfassung

Um die Funktion isPrototypeOf zu verstehen, ist es tatsächlich entscheidend, die Prototypenkette zu verstehen.

Dies ist das Ende dieses Artikels über die Funktion isPrototypeOf in JavaScript . Weitere Informationen zu isPrototypeOf in JavaScript 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:
  • Javascript-Prototyp
  • Details zum JavaScript-Prototyp
  • Ein gründliches Verständnis des JS-nativen Syntaxprototyps, des __proto__ und des Konstruktors
  • JavaScript verwendet die Prototype-Eigenschaft, um Vererbungsoperationen zu implementieren. Beispiel
  • Implementierung der Dimensionsreduzierung von JS-Arrays Array.prototype.concat.apply([], arr)
  • Erweiterung des js String.prototype.trim-Zeichens zum Entfernen führender und nachfolgender Leerzeichen
  • JavaScript __proto__ und Prototyp

<<:  TinyEditor ist ein einfacher und benutzerfreundlicher HTML-WYSIWYG-Editor

>>:  Umfassende Analyse des MySql-Master-Slave-Replikationsmechanismus

Artikel empfehlen

Eine kurze Diskussion zu DDL und DML in MySQL

Inhaltsverzeichnis Vorwort 1. DDL 1.1 Datenbankop...

Beispiel für die MySQL-Methode zum Löschen von Daten und Datentabellen

Es ist sehr einfach, Daten und Tabellen in MySQL ...

Detaillierte Erklärung inkompatibler Änderungen von Komponenten in vue3

Inhaltsverzeichnis Funktionale Komponenten So sch...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.17 winx64

Ich habe die vorherigen Hinweise zur Installation...

Detaillierte Erläuterung der Vue-Lebenszyklusfunktionen

Inhaltsverzeichnis Lebenszyklusfunktionen Allgeme...

So ändern Sie das ROOT-Passwort in MySql8.0 und höheren Versionen richtig

Bereitstellungsumgebung: Installationsversion Red...

Instanzmethode für MySQL-String-Verkettung und Festlegen von Nullwerten

#String-Verkettung concat(s1,s2); verkette die St...

Tutorial zur Installation von Elasticsearch 7.6.2 in Docker

Docker installieren Sie müssen Docker installiere...

So ändern Sie das Datenbankdatenspeicherverzeichnis in MySQL

Vorwort Die Standarddatenbankdatei der MySQL-Date...

Eine audiovisuelle Linux-Distribution, die Audiophile anspricht

Ich bin kürzlich auf das Audiovisual Linux Projec...

js zur Realisierung der automatischen Sperrbildschirmfunktion

1. Anwendungsszenarien Es gibt eine solche Anford...