Useimmissa oliokeskeisissä ohjelmointikielissä avainsanalla 'this' on erityinen merkitys. Yleensä se viittaa suorituskontekstissa olevaan objektiin (eli objektin nykyiseen instanssiin). Käytämme tätä esimerkiksi silloin, kun viittaamme objektin ominaisuuteen sisältä käsin: kirjoitamme this.propertyName, jolloin konteksti on objekti ja this viittaa siihen.
'tämä'JavaScript:ssä
Osoitteessa JavaScript se on monimutkaisempi, koska jos tämä viittaa, riippuu paitsi siitä, miten funktio on määritelty, myös siitä, missä muodossa sitä kutsutaan.
Katso miten tämä toimii riippuen kutsun paikasta ja muodosta.
Maailmanlaajuinen konteksti
Käytetään globaalissa kontekstissa, joka on sidottu globaaliin objektiin, kuten esim. ikkuna verkkoselaimessa.
this; // ikkuna
Sisällä objektimenetelmä
Käytetään objektimenetelmän sisällä, joka on sidottu lähimpään ympäröivään objektiin. Objekti on uusi konteksti tämä avainsana. Huomaa, että sinun ei pitäisi muuttaa funktio () ES6-syntaksiin fun: () => this.context koska se muuttaa asiayhteyttä.
Käytetään funktion sisällä, jolla ei ole kontekstia (jolla ei ole objektia vanhempana), joka on sidottu globaaliin kontekstiin, vaikka funktio olisi määritelty objektin sisällä.
Huomaa, että käytämme var context sen sijaan, että let/const context koska anna ja const muuttaa muuttujan sisältämää kontekstia. var on aina lähimpänä globaalia suorituskontekstia. anna ja const ilmoittaa muuttujia vain paikallisessa lohkon laajuudessa.
var context = "global";
const obj = {
context: "object",
funA: function() {
function funB() {
const context = "function";
return this.context;
}
return funB(); // kutsutaan ilman kontekstia.
}
};
obj.funA(); // globaali
Konstruktorifunktion sisällä
Käytetään funktion sisällä, joka on siihen sidotun uuden objektin konstruktori.
var context = "global";
function Obj() {
this.context = "Obj-konteksti";
}
const obj = new Obj();
obj.context; // Obj-konteksti
Prototyyppiketjussa määritellyn funktion sisällä
Käytetään prototyyppiketjussa määritellyn funktion sisällä luodakseen siihen sidotun objektin.
call() ja apply() ovat JavaScript toiminnot. Niiden avulla objekti voi käyttää toisen objektin metodeja. call() ottaa argumentit erikseen, kun apply() ottaa ne matriisina.
tämä on tässä yhteydessä sidottu uuteen kontekstiin, joka on muutettu call() ja apply() menetelmät.
Käytetään missä tahansa tapahtumankäsittelijässä (esim, addeventListener, onclick, attachEvent), se sidotaan DOM-elementtiin, johon tapahtuma oli liitetty.
document.querySelector(".foo").addEventListener("click", function() {
this; // viittaa div-elementtiin `foo`.
});
ES6 nuolifunktio
Jos sitä käytetään nuolifunktion sisällä, se on aina sidottu sen leksikaaliseen laajuuteen. Nuolifunktiossa et voi määrittää uudelleen funktiota tämä millään tavalla.