Sobes.tech
Junior

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.