Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 98
4.9.4Der instanceof-Operator
ОглавлениеDer instanceof-Operator erwartet auf der linken Seite ein Objekt als Operanden und auf der rechten Seite einen Operanden, der eine Klasse von Objekten angibt. Der Operator wird zu true ausgewertet, wenn das linke Objekt eine Instanz der rechten Klasse ist, ansonsten zu false. Kapitel 9 erläutert, dass in JavaScript Klassen von Objekten durch die Konstruktorfunktionen definiert werden, mit denen Objektinstanzen initialisiert werden. Der rechte Operand sollte beim instanceof-Operator also eine Funktion sein. Hier einige Beispiele:
let d = new Date(); // Erstellt ein neues Objekt mit dem Date()-Konstruktor.
d instanceof Date // => true: d wurde mit Date() erstellt.
d instanceof Object // => true: Alle Objekte sind Instanzen von Object.
d instanceof Number // => false: d ist kein Number-Objekt.
let a = [1, 2, 3]; // Erstellt ein Array mit Array-Literal-Syntax.
a instanceof Array // => true: a ist ein Array.
a instanceof Object // => true: Alle Arrays sind Objekte.
a instanceof RegExp // => false: Arrays sind keine regulären Ausdrücke.
Beachten Sie bitte, dass alle Objekte Instanzen von Object sind. instanceof berücksichtigt auch eventuell vorhandene übergeordnete Klassen (sogenannte »Superklassen«), wenn es entscheidet, ob ein Objekt eine Instanz einer Klasse ist. Ist der linksseitige Operand von instanceof kein Objekt, liefert der Operator false. Ist die rechte Seite keine Objektklasse, wird ein TypeError ausgelöst.
Um genau zu verstehen, wie der instanceof-Operator funktioniert, müssen wir uns die »Prototypenkette« anschauen. Damit ist der Vererbungsmechanismus von JavaScript gemeint, der in 6.3.2 beschrieben wird. Im Ausdruck o instanceof f wertet JavaScript zuerst den Teilausdruck f.prototype aus und sucht dann in der Prototypenkette von o nach diesem Wert. Wenn er dort gefunden wird, ist o eine Instanz von f (oder eine Unterklasse von f), und der Operator gibt true zurück. Wenn f.prototype kein Wert in der Prototypenkette von o ist, dann ist o keine Instanz von f, und instanceof gibt false zurück.