Junior
Mis on märksõna 'this'?
sobes.tech AI
Vastus AI-lt
this on JavaScripti märksõna, mis viitab objekti, mille kontekstis käivitatakse praegune kood. Selle väärtus määratakse funktsiooni kutsumise viisi järgi.
this määramise peamised viisid:
- Globaalkontekst: Funktsiooni väliselt viitab
thisglobaalsele objektile (windowbrauseris,globalNode.js-is). - Tavaline funktsiooni kutsumine: Mitte-striktse režiimi (
strict mode) korral viitabthissamuti globaalsele objektile (võiundefined, kui funktsioon kutsutakse objekti meetodina, kuid see objekt onnullvõiundefined). Striktse režiimi korral onthisvõrdneundefined. - Objekti meetod: Kui funktsioon kutsutakse objekti meetodina (st. punktoperaatorit
.kasutades), viitabthissellele objektile, mis meetodi omab. - Konstruktor: Kasutades
newoperaatorit, viitabthisuuele loodud objekti eksemplarile. call(),apply(),bind()meetodid: Need meetodid võimaldavad selgelt määratathisväärtuse funktsiooni kutsumisel.bind()tagastab uue funktsiooni koos siduvathis-ga, samas kuicall()jaapply()kutsuvad funktsiooni määratudthis-ga.- Noolefunktsioonid: Noolefunktsioonidel ei ole oma
this-i.thisnoolefunktsioonis pärandub see ümbritsevast kontekstist, kus see defineeriti.
Näited:
// Globaalkontekst
console.log(this === window); // true (brauseris)
// Tavaline funktsiooni kutsumine
function myFunction() {
console.log(this);
}
myFunction(); // window (mitte-striktse režiimi korral)
// Objekti meetod
const myObject = {
myMethod: function() {
console.log(this);
}
};
myObject.myMethod(); // myObject
// Konstruktor
function MyConstructor() {
this.value = 10;
console.log(this);
}
const instance = new MyConstructor(); // uus objekt
// call(), apply(), bind()
function greet(name) {
console.log("Hello, " + name + "! My name is " + this.name);
}
const person = { name: "Alice" };
greet.call(person, "Bob"); // Hello, Bob! My name is Alice
greet.apply(person, ["Bob"]); // Hello, Bob! My name is Alice
const boundGreet = greet.bind(person);
boundGreet("Bob"); // Hello, Bob! My name is Alice
// Noolefunktsioon
const arrowFunction = () => {
console.log(this);
};
arrowFunction(); // window (kui defineeritud globaalses kontekstis)
Selle mõistmine, kuidas this määratakse erinevates kontekstides, on oluline korrektse JavaScripti koodi kirjutamiseks.