typeof (new (class F extends (String, Array) { })).substring
In JavaScript liefert der "typeof"-Operator als Ergebnis einen String, der die Art eines Operanden angibt. Wenn der Operand ein Objekt ist, ist das Ergebnis normalerweise "object".
Schauen wir uns jetzt den Ausdruck an, um ihn besser zu verstehen:
typeof (new (class F extends (String, Array) { })).substring
Was versucht dieser Code zu erreichen? Hier versucht der Programmierer, eine neue Klasse namens F zu erstellen, die sowohl von der String- als auch von der Array-Klasse erbt. Aber JavaScript unterstützt keine Mehrfachvererbung.
Wenn ein Komma verwendet wird, um mehrere Ausdrücke zu trennen, wird nur der letzte Ausdruck als Wert akzeptiert. Deshalb ist hier class F
eigentlich eine Unterklasse von Array
, weil Array
der letzte Ausdruck ist.
Das new
Schlüsselwort erstellt eine neue Instanz der Klasse. In diesem Fall wird substring
als Eigenschaft aufgerufen, die nicht existiert, wodurch undefined
zurückgegeben wird. Wenn typeof undefined
aufgerufen wird, gibt es undefined
als String zurück.
Im Allgemeinen sollten Sie beim Schreiben von JavaScript immer eine klare und lesbare Syntax verwenden, um solche Verwirrungen und Fehler zu vermeiden. Bei der Vererbung sollte eine Klasse immer nur von einer anderen Klasse erben, um die Lesbarkeit und Verständlichkeit des Codes zu erhöhen und mögliche Fehler zu vermeiden.
Hoffentlich bietet diese Erklärung einen klaren Einblick in das Verständnis von typeof und Vererbung in JavaScript.