Hodet / Globalt objekt

JavaScript-koden i seg selv må være inneholdt i et objekt. For eksempel, når du lager JavaScript-kode for et nettlesermiljø, er JavaScript inneholdt og utført i vindu gjenstand. Dette vindu objekt anses å være "hodeobjektet" eller noen ganger forvirrende referert til som "det globale objektet". Alle implementeringer av JavaScript krever bruk av et enkelt hodeobjekt.

Hodet objektet er satt opp av JavaScript bak kulissene for å inkapslere brukerdefinert kode og å huse den innfødte koden som JavaScript leveres ferdigpakket med. Brukerdefinert kode er plassert av JavaScript inne i hovedenheten for utførelse. La oss bekrefte dette som det gjelder en nettleser.

I følgende eksempel lager jeg noen JavaScript-verdier og verifiserer verdiene er plassert i hodet vindu gjenstand.

Eksempel: sample64.html

 

Du bør alltid være oppmerksom på at når du skriver JavaScript, vil den bli skrevet i sammenheng med hovedobjektet. Det gjenværende materialet i dette kapittelet antar at du er klar over at begrepet "hovedobjekt" er synonymt med "globalt objekt".

Hovedobjektet er det høyeste omfanget / konteksten tilgjengelig i et JavaScript-miljø.


Globale funksjoner inneholdt innenfor hovedobjektet

JavaScript leveres med noen forhåndsdefinerte funksjoner. Følgende innfødte funksjoner betraktes som metoder for hodeobjektet (som i en nettleser, window.parseInt ( '500')). Du kan tenke på disse som ferdige funksjoner og metoder (av hodeobjektet) som leveres av JavaScript.

  • decodeURI ()
  • decodeURIComponent ()
  • encodeURI ()
  • encodeURIComponent ()
  • eval ()
  • isFinite ()
  • isNaN ()
  • parseFloat ()
  • parseInt ()

Hovedobjektet mot globale egenskaper og globale variabler

Ikke forveksle hodeobjektet med globale egenskaper eller globale variabler som finnes i det globale omfanget. Hodetobjektet er et objekt som inneholder alle objekter. Begrepet "globale egenskaper" eller "globale variabler" brukes til å referere til verdier som er direkte inneholdt i hovedobjektet og ikke spesifikt scoped til andre objekter. Disse verdiene betraktes som globale fordi uansett hvor koden for tiden utføres, har alle koden tilgang (via omfangskjeden) til disse globale egenskapene og variablene.

I den følgende prøven plasserer jeg en foo eiendom i det globale omfanget, og få tilgang til denne egenskapen fra et annet omfang.

Eksempel: sample65.html

 

Hadde jeg plassert foo eiendom utenfor det globale omfanget, console.log funksjonen ville returnere udefinert. Dette er demonstrert i neste kodeeksempel.

Eksempel: sample66.html

 

I nettlesermiljøet er det derfor globale eiendomsmetoder (for eksempel, window.alert ()) kan påberopes fra ethvert omfang. Det du trenger å ta bort fra dette er at alt i det globale omfanget er tilgjengelig for noe omfang, og får dermed tittelen på "global variabel" eller "global eiendom".

Det er en liten forskjell mellom å bruke Var og ikke bruker Var i det globale omfanget (globale egenskaper vs globale variabler). Ta en titt på denne Stack Overflow-utvekslingen for detaljer: Forskjellen mellom å bruke var og ikke å bruke var i JavaScript.


Med henvisning til hovedobjektet

Det er vanligvis to måter å referere til på hovedobjektet. Den første måten er å bare referere til navnet som er gitt til hodeobjektet (som i en nettleser dette ville være vindu). Den andre måten er å bruke dette søkeord i det globale omfanget. Hver av disse er beskrevet i følgende eksempel.

Eksempel: sample67.html

 

I dette eksemplet lagrer vi eksplisitt en referanse til hodeobjektet i to variabler som deretter brukes til å få tilgang til det globale foo variabel.


Hovedobjektet er implisitt og vanligvis ikke referert eksplisitt

Vanligvis brukes ikke en referanse til hodeobjektet fordi det er underforstått. For eksempel i nettlesermiljøet window.alert og varsling() er i det vesentlige samme utsagn. JavaScript fyller i blankene her. Fordi det vindu objekt (hodeobjektet) er det siste objektet som er sjekket i omfangskæden for en verdi, den vindu objekt er i hovedsak alltid underforstått. I det neste eksemplet bruker vi varsling() funksjon som er inneholdt i det globale omfanget.

Eksempel: sample68.html

 

Konklusjon

Forsikre deg om at du forstår at hodetobjektet er underforstått, selv når du ikke eksplisitt inkluderer det, fordi hodelegemet er det siste stoppet i omfangskæden.

Å være eksplisitt (for eksempel, window.alert () vs. varsling()) koster litt mer med hensyn til ytelse (hvor fort koden går). Det er raskere hvis du stole på omfanget av kjeden alene og unngår eksplisitt å referere til hodeobjektet, selv om du vet at eiendommen du vil, finnes i det globale omfanget.