Kas yra this JavaScript?
sobes.tech AI
Atsakymas iš AI
„this“ JavaScript yra raktinis žodis, nurodantis funkcijos vykdymo kontekstą. Jo reikšmė priklauso nuo funkcijos kvietimo būdo.
Dažniausiai this nurodo į globalųjį objektą (naršyklėje window) paprasto kvietimo atveju, jei nėra strict režimo.
Strict režimu ('use strict') tas pats scenarijus this bus undefined.
Kviečiant objekto metodą, this nurodo į patį objektą.
const obj = {
method: function() {
console.log(this); // obj
}
};
obj.method();
Kviečiant konstruktorių (new su funkcija), this nurodo į naujai sukurtą objekto egzempliorių.
function Constructor() {
console.log(this); // `Constructor` egzempliorius
}
const instance = new Constructor();
Naudojant call, apply, bind metodus, this aiškiai nustatomas kaip pirmasis argumentas.
function greet() {
console.log(`Sveiki, ${this.name}!`);
}
const person = { name: 'Alisa' };
greet.call(person); // Sveiki, Alisa!
greet.apply(person); // Sveiki, Alisa!
const boundGreet = greet.bind(person);
boundGreet(); // Sveiki, Alisa!
Arrow funkcijose this neturi savo konteksto. Jis liukso būdu paveldimas iš aplinkos, kurioje buvo apibrėžta arrow funkcija.
const obj2 = {
name: 'Bob',
greet: function() {
const arrowGreet = () => {
console.log(`Sveiki, ${this.name}!`); // `this` nurodo į `obj2`
};
arrowGreet();
}
};
obj2.greet(); // Sveiki, Bob!
const obj3 = {
name: 'Charly',
greet: () => {
console.log(`Sveiki, ${this.name}!`); // `this` nurodo į langą (`window`) arba `undefined` strict režimu, ne į `obj3`
}
};
obj3.greet(); // Sveiki, `undefined`!
Kontekstas this gali būti neaiškus, ypač perduodant atgalinius kvietimus ar asinchronines operacijas. Jo taisyklių supratimas yra labai svarbus teisingam JavaScript veikimui.