Enamikus objektorienteeritud programmeerimiskeeltes on võtmesõnal 'this' eriline tähendus. Tavaliselt viitab see objektile, mis on täitmiskontekst (st objekti praegusele eksemplarile). Näiteks kasutame seda, kui viitame objekti omadusele seestpoolt: kirjutame this.propertyName, ja siis on kontekstiks objekt ja see viitab sellele.
'see'aastal JavaScript
Veebilehel JavaScript see on keerulisem, sest kui see viitab, ei sõltu mitte ainult sellest, kuidas funktsioon on defineeritud, vaid ka sellest, millises vormis seda kutsutakse.
Vaadake, kuidas see töötab sõltuvalt kutsumise kohast ja vormist.
Ülemaailmne kontekst
Kasutatakse globaalses kontekstis, mis on seotud globaalse objektiga, näiteks aken veebibrauseris.
this; // aken
Objekti meetodi sees
Kasutatakse objektimeetodi sees, mis on seotud lähima ümbritseva objektiga. Objekt on uue konteksti see märksõna. Pange tähele, et te ei tohiks muuta funktsioon () ES6 süntaksile fun: () => this.context sest see muudab konteksti.
Kasutatakse funktsiooni sees, millel ei ole konteksti (millel ei ole vanemobjekt), mis on seotud globaalse kontekstiga, isegi kui funktsioon on defineeritud objekti sees.
Pange tähele, et me kasutame var kontekst selle asemel, et let/const kontekst sest lase ja const muuta muutuja lisatud konteksti. var on alati kõige lähemal globaalsele täitmiskontekstile. lase ja const deklareerida muutujaid ainult kohalikus plokis.
var context = "global";
const obj = {
context: "object",
funA: function() {
function funB() {
const context = "function";
return this.context;
}
return funB(); // kutsutakse üles ilma kontekstita
}
};
obj.funA(); // globaalne
Konstruktori funktsiooni sees
Kasutatakse funktsiooni sees, mis on sellega seotud uue objekti konstruktor.
var context = "global";
function Obj() {
this.context = "Obj kontekst";
}
const obj = new Obj();
obj.context; // Obj context
Prototüüpide ahelas määratletud funktsioonis
Kasutatakse prototüübi ahelas määratletud funktsiooni sees, et luua sellega seotud objekt.
call() ja apply() on JavaScript funktsioonid. Nende abil saab objekt kasutada teisele objektile kuuluvaid meetodeid. call() võtab argumendid eraldi, kus apply() võtab neid massiivi kujul.
see on siinkohal seotud uue kontekstiga, mis on muudetud call() ja apply() meetodid.