I de fleste objektorienterte programmeringsspråk har nøkkelordet "this" en spesiell betydning. Vanligvis refererer det til objektet som er utførelseskonteksten (dvs. til den aktuelle forekomsten av objektet). Vi bruker for eksempel dette når vi refererer til en objektegenskap innenfra: Vi skriver this.propertyName, og da er konteksten objektet, og this refererer til det.
"dettei JavaScript
I JavaScript er det mer komplisert fordi hvor dette refererer til, avhenger ikke bare av hvordan funksjonen er definert, men også av hvordan den kalles.
Ta en titt på hvordan dette fungerer avhengig av påkallingssted og -form.
Global kontekst
Brukes i en global kontekst bundet til det globale objektet, som vindu i en nettleser.
dette; // vindu
Inne i objektmetoden
Brukes inne i en objektmetode som er bundet til det nærmeste omsluttende objektet. Objektet er den nye konteksten til dette nøkkelord. Merk at du ikke bør endre funksjon () til ES6-syntaks fun: () => this.context fordi det vil endre konteksten.
Brukes i en funksjon som ikke har noen kontekst (ikke har noe objekt som overordnet) bundet til den globale konteksten, selv om funksjonen er definert inne i objektet.
Merk at vi bruker var kontekst i stedet for let/const-kontekst fordi la og konst endre den vedlagte konteksten for variabelen. var er alltid nærmest den globale kjøringskonteksten. la og konst deklarere variabler bare i et lokalt blokkområde.
call() og apply() er JavaScript funksjoner. Med disse kan et objekt bruke metoder som tilhører et annet objekt. call() tar argumenter separat der apply() tar dem som en matrise.
dette er her bundet til ny kontekst endret i call() og apply() metoder.
Brukes i enhver hendelsesbehandler (for eksempel, addeventListener, onclick, attachEvent), er den bundet til DOM-elementet som hendelsen var knyttet til.
document.querySelector(".foo").addEventListener("click", function() {
this; // refererer til div-elementet `foo`
});
ES6-pilfunksjon
Når den brukes inne i pilfunksjonen, er den alltid bundet til det leksikalske omfanget. I pilfunksjonen kan du ikke tilordne dette på noen som helst måte.