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?
Wie in ECMA-262 ECMAScript Language Specification 3rd Edition (siehe Fußnote) definiert, basiert es auf die Spezifikation (Abschnitt 15.3.4.4):
%Vor% 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.
Tags und Links javascript ecma262 call