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

So öffnen Sie den Port in Centos7

Die Standard-Firewall von CentOS7 ist nicht iptab...

So richten Sie eine automatische tägliche Datenbanksicherung in Linux ein

Dieser Artikel verwendet das Centos7.6-System und...

Beispielcode zur Implementierung von dynamischem Skinning mit vue+element

Manchmal kann das Thema eines Projekts nicht jede...

Detaillierte Erklärung des Lebenszyklus einer Angular-Komponente (I)

Inhaltsverzeichnis Überblick 1. Hook-Aufrufreihen...

CSS-Code zur Steuerung der Hintergrundfarbe der Webseite

Ich glaube, jeder macht sich oft Sorgen, ob er Bi...

Detaillierte Erläuterung der gespeicherten Prozeduren und Funktionen von MySQL

1 Gespeicherte Prozedur 1.1 Was ist eine gespeich...

Grundkenntnisse zu MySQL – Lernhinweise

Datenbank anzeigen show databases; Erstellen eine...

Der gesamte Prozess der Optimierung des ersten Ladens einer Vue-Seite

Inhaltsverzeichnis Vorwort 1. Bildoptimierung 2. ...

Windows Server 2008-Tutorial zur Überwachung der Serverleistung

Als Nächstes erfahren Sie, wie Sie die Serverleis...

JavaScript-Ereigniserfassungs-Blubbern und Erfassungsdetails

Inhaltsverzeichnis 1. Ereignisablauf 1. Konzept 2...