2017-02-07 1 views
0

Wenn wir "Instanz von" sagen, nehmen wir an, dass es sich um ein Objekt handelt. Warum gibt der Operator instanceof von JavaScript true zurück, wenn wir (class A { }) instanceof Function, aber typeof (class A { }) == "function" fragen? Warum nicht object?Warum in JavaScript-Klasse Eine instanceof-Funktion, aber der Typ der Klasse A ist kein Objekt?

+0

Sie haben es mit einem Objekt zu tun. Funktionen sind Objekte in Javascript. – AmericanUmlaut

+1

Warum ist es überraschend, dass eine Instanz einer Funktion eine Art "Funktion" hat? Es scheint mir, als wäre es eine wichtige Unterscheidung. –

+0

@Squint, aber ... aber Klasse ist kein Objekt =). Dies gilt natürlich nicht für JavaScript ... – ktretyak

Antwort

4

Warum Bediener JavaScript instanceof true zurück, wenn wir (class A { }) instanceof Function

class es fragen sind nur syntaktischer Zucker für Konstruktorfunktionen. I.e. Die Auswertung von class A {} erzeugt eine Funktion.

Die folgenden beiden Beispiele sind (mehr oder weniger) äquivalent, dh sie das gleiche Ergebnis/Wert erzeugen:

// class 
class A { 
    constructor() { 
    this.foo = 42; 
    } 

    bar() { 
    console.log(this.foo); 
    } 
} 

// constructor function 
function A() { 
    this.foo = 42; 
} 

A.prototype.bar = function() { 
    console.log(this.foo); 
} 

Alles, was nicht ein primitiver Wert (string, number, boolean, null, nicht definiert ist, Symbol) ist ein Objekt in JavaScript. Funktionen sind auch Objekte, mit speziellen internen Eigenschaften, die sie aufrufbar machen (und/oder konstruierbar).


Warum Objekt nicht?

typeof gibt die Zeichenfolge "function" für Werte Funktion, weil das ist, wie es in der Beschreibung definiert ist.

Verwandte Themen