Junior
Kas yra raktinis žodis 'this'?
sobes.tech AI
Atsakymas iš AI
this yra raktinis žodis JavaScript, kuris nurodo objektą, kuriame vykdomas dabartinis kodas. Jo reikšmė nustatoma funkcijos kvietimo būdu.
Pagrindiniai this nustatymo būdai:
- Globalus kontekstas: Už funkcijos ribų,
thisnurodo į globalųjį objektą (windownaršyklėje,globalNode.js). - Įprastas funkcijos kvietimas: Nestriktame režime (
strict mode)thistaip pat nurodo į globalųjį objektą (arbaundefined, jei funkcija kviečiama kaip objekto metodas, tačiau tas objektas yranullarbaundefined). Griežtame režime,thisyra lygusundefined. - Objekto metodas: Jei funkcija kviečiama kaip objekto metodas (t. y. per taško operatorių
.),thisnurodo į tą objektą, kuris turi metodą. - Konstruktorius: Naudojant
newoperatorių,thisnurodo į naujai sukurtą objekto egzempliorių. call(),apply(),bind()metodai: Šie metodai leidžia aiškiai nustatytithisreikšmę funkcijos kvietimo metu.bind()grąžina naują funkciją su pririštuthis, ocall()irapply()iškviečia funkciją su nurodytuthis.- Rodyklės funkcijos: Rodyklės funkcijos neturi savo
this.thisrodyklės funkcijoje paveldima iš aplinkos, kurioje ji buvo apibrėžta.
Pavyzdžiai:
// Globalus kontekstas
console.log(this === window); // true (naršyklėje)
// Įprastas funkcijos kvietimas
function myFunction() {
console.log(this);
}
myFunction(); // window (negriežtame režime)
// Objekto metodas
const myObject = {
myMethod: function() {
console.log(this);
}
};
myObject.myMethod(); // myObject
// Konstruktorius
function MyConstructor() {
this.value = 10;
console.log(this);
}
const instance = new MyConstructor(); // naujas objektas
// 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
// Rodyklės funkcija
const arrowFunction = () => {
console.log(this);
};
arrowFunction(); // window (jei apibrėžta globaliame kontekste)
Suprasti, kaip this yra nustatomas skirtinguose kontekstuose, yra esminis rašant teisingą JavaScript kodą.