JavaScript-koden själv måste vara inne i ett objekt. När du till exempel skapar JavaScript-kod för en webbläsarmiljö, finns JavaScript och exekveras inom fönster
objekt. Detta fönster
objekt anses vara "huvudobjektet" eller ibland förvirrande benämnt "det globala objektet". Alla implementeringar av JavaScript kräver användning av ett enda huvudobjekt.
Huvudobjektet är upprättat av JavaScript bakom kulisserna för att inkapslera användardefinierad kod och för att hysa den inbyggda koden med vilken JavaScript kommer förpackas. Användardefinierad kod placeras av JavaScript i huvudobjektet för exekvering. Låt oss verifiera detta eftersom det gäller en webbläsare.
I följande exempel skapar jag några JavaScript-värden och verifierar värdena placeras i huvudet fönster
objekt.
Prov: sample64.html
Du bör alltid vara medveten om att när du skriver JavaScript kommer det att skrivas i samband med huvudobjektet. Det återstående materialet i detta kapitel förutsätter att du är medveten om att termen "huvudobjekt" är synonymt med "globalt objekt".
Huvudobjektet är det högsta innehållet / kontextet tillgängligt i en JavaScript-miljö.
JavaScript skickas med några fördefinierade funktioner. Följande inbyggda funktioner anses vara metoder för huvudobjektet (som i en webbläsare, window.parseInt ( '500')
). Du kan tänka på dessa som färdiga funktioner och metoder (av huvudobjektet) som tillhandahålls av JavaScript.
decodeURI ()
decodeURIComponent ()
encodeURI ()
encodeURIComponent ()
eval ()
isFinite ()
isNaN ()
parseFloat ()
parseInt ()
Förvirra inte huvudobjektet med globala egenskaper eller globala variabler som ingår i det globala räckviddet. Huvudobjektet är ett objekt som innehåller alla objekt. Termen "globala egenskaper" eller "globala variabler" används för att hänvisa till värden som är direkt inrymda i huvudobjektet och inte specifikt scoped till andra objekt. Dessa värden anses vara globala, oavsett var kod körs för närvarande, vad gäller omfattning har all kod tillgång till (via omfattningskedjan) till dessa globala egenskaper och variabler.
I följande prov placerar jag en foo
egendom i det globala räckviddet, åtkomst till den här egenskapen från en annan räckvidd.
Prov: sample65.html
Hade jag placerat foo
egendom utanför den globala räckvidden, console.log
funktionen skulle återvända odefinierad
. Detta visas i nästa kodexempel.
Prov: sample66.html
I webbläsarmiljön är det därför globala fastighetsmetoder (till exempel, window.alert ()
) kan åberopas från vilken som helst räckvidd. Vad du behöver ta bort från detta är att allt i det globala räckviddet är tillgängligt för alla räckvidd och får därmed titeln "global variabel" eller "global egenskap.
Det är en liten skillnad mellan att använda var
och inte använda var
i globala omfattningen (globala egenskaper vs globala variabler). Ta en titt på denna Stack Overflow utbyte för detaljerna: Skillnaden mellan att använda var och inte använda var i JavaScript.
Det finns typiskt två sätt att referera till huvudobjektet. Det första sättet är att helt enkelt referera till namnet på huvudobjektet (som i en webbläsare skulle detta vara fönster
). Det andra sättet är att använda detta
sökord i det globala räckviddet. Var och en av dessa beskrivs i följande exempel.
Prov: sample67.html
I det här exemplet lagras vi uttryckligen för huvudobjektet i två variabler som sedan används för att få tillgång till det globala foo
variabel.
Vanligtvis används inte en referens till huvudobjektet eftersom det är underförstått. Till exempel i webbläsarmiljön window.alert
och varna()
är i huvudsak samma uttalande. JavaScript fyller i blankorna här. Eftersom det fönster
objekt (huvudobjektet) är det sista objektet som kontrolleras i kedjan för ett värde, fönster
Objektet är i huvudsak alltid underförstått. I nästa exempel utnyttjar vi varna()
funktion som ingår i det globala räckviddet.
Prov: sample68.html
Se till att du förstår att huvudobjektet är underförstått även om du inte uttryckligen inkluderar det, eftersom huvudobjektet är det sista stoppet i omfångskedjan.
Att vara explicit (till exempel, window.alert ()
mot. varna()
) kostar lite mer med avseende på prestanda (hur snabbt koden körs). Det är snabbare om du litar på omfattningskedjan ensam och undviker att uttryckligen referera till huvudobjektet, även om du vet att den egendom du vill ha finns i den globala räckvidden.