JavaScript/Operatoren/instanceof

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Der instanceof-Operator prüft, grob gesagt, ob ein Objekt von einer bestimmten Konstruktorfunktion erzeugt worden ist.

Beispiel
object instanceof Constructor

Folgende Parameter sind erforderlich:

  • object: Das zu prüfende Objekt.
  • Constructor: die Konstruktorfunktion, deren Beteiligung an der Erzeugung dieses Objekts zu prüfen ist

Der Zusammenhang zwischen Objekt und Konstruktorfunktion wird über den Prototypen des Objekts hergestellt. Eine Konstruktorfunktion besitzt die Eigenschaft prototype, worin ein Objekt hinterlegt sein muss, das für die von der Konstruktorfunktion erzeugten Objekte als Prototyp genutzt wird. Im einfachen Fall ist die instanceof-Bedingung also erfüllt, wenn der Prototyp des Objekts mit dem Wert der prototype-Eigenschaft der Konstruktorfunktion übereinstimmt.

Schwieriger ist es bei Vererbungshierarchien. Beispielsweise besitzt ein Array-Objekt nicht nur die Methoden des Array-Prototypen in Array.prototype, sondern auch die von Object.prototype. Das geschieht deshalb, weil der Array-Prototyp seinerseits ein Prototyp-Objekt besitzt, nämlich das in Object.prototype. Eine solche Vererbungskette kann noch viel länger werden, die HTMLDivElement-Funktion, die die Programmierschnittstelle für div-Elemente darstellt (aber kein echter Konstruktor ist), enthält einen Prototypen, der über 5 Stufen geht (HTMLElement, Element, Node, EventTarget, Object).

Um solche Hierarchien prüfen zu können, läuft instanceof die vollständige Prototypenkette des zu prüfenden Objekts ab und schaut, ob einer davon zu der angefragten Konstruktorfunktion gehört. Deshalb meldet das folgende Beispiel Erfolg:

div erbt von Node
const divElem = document.querySelector("#worf");
if (divElem instanceof Node)
   console.log("Qapla'");