Warum gibt 'typeof this' ein Objekt zurück?

8
%Vor%

Ich sehe die gleichen Ergebnisse in Chrome, Firefox und Safari, also nehme ich an, dass es per die Spezifikation , aber ... warum? Und wo in der Spezifikation ist das definiert? Und warum nicht für Funktionen?

    
Phrogz 08.12.2010, 17:54
quelle

1 Antwort

11

Wie in ECMA-262 ECMAScript Language Specification 3rd Edition (siehe Fußnote) definiert, basiert es auf die Spezifikation (Abschnitt 15.3.4.4):

%Vor%

Parameter

thisArg

  

Bestimmt den Wert dieses Inneren   Spaß. Wenn thisArg null oder undefiniert ist,   Dies wird das globale Objekt sein.   Ansonsten wird dies gleich sein   Objekt (thisArg) (das ist thisArg wenn   ThisArg ist bereits ein Objekt oder a   String, Boolean oder Number, wenn thisArg   ist ein primitiver Wert der   entsprechender Typ). Daher ist es   immer wahr dieser Typ dieses ==   "Objekt", wenn die Funktion ausgeführt wird.

Beachten Sie insbesondere die letzte Zeile.

Entscheidend ist, dass js-Primitive ( string , number , boolean , null , undefined ) unveränderlich sind, so dass ihnen keine Funktion zugeordnet werden kann. Daher umschließt die Funktion call das Grundelement in Object , sodass die Funktion angehängt werden kann.

ZB:

Funktioniert nicht:

%Vor%

funktioniert:

%Vor%

(Fußnote) - Wie patrick dw in den Kommentaren vermerkt ist, wird sich dies in ECMA-262 ECMAScript Language Specification 5. Ausgabe im strikten Modus:

  

Aus Abschnitt 15.3.4.4:

     
    

HINWEIS Das     thisArg-Wert wird ohne übergeben     Modifikation als dieser Wert. Dies     ist eine Änderung von Edition 3, wo a     undefined oder null thisArg wird ersetzt     mit dem globalen Objekt und ToObject ist     auf alle anderen Werte angewendet und das     Ergebnis wird als dieser Wert übergeben.

  
    
jball 08.12.2010, 17:58
quelle

Tags und Links