Sobes.tech
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ų, this nurodo į globalųjį objektą (window naršyklėje, global Node.js).
  • Įprastas funkcijos kvietimas: Nestriktame režime (strict mode) this taip pat nurodo į globalųjį objektą (arba undefined, jei funkcija kviečiama kaip objekto metodas, tačiau tas objektas yra null arba undefined). Griežtame režime, this yra lygus undefined.
  • Objekto metodas: Jei funkcija kviečiama kaip objekto metodas (t. y. per taško operatorių .), this nurodo į tą objektą, kuris turi metodą.
  • Konstruktorius: Naudojant new operatorių, this nurodo į naujai sukurtą objekto egzempliorių.
  • call(), apply(), bind() metodai: Šie metodai leidžia aiškiai nustatyti this reikšmę funkcijos kvietimo metu. bind() grąžina naują funkciją su pririštu this, o call() ir apply() iškviečia funkciją su nurodytu this.
  • Rodyklės funkcijos: Rodyklės funkcijos neturi savo this. this rodyklė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ą.