Sobes.tech
Junior

Kas ir atslēgvārds 'this'?

sobes.tech AI

Atbilde no AI

this irv atslēgas vārds JavaScript, kas norāda uz objektu, kurā tiek izpildīts pašreizējais kods. Tā vērtība tiek noteikta funkcijas izsaukšanas veida dēļ.

Galvenie this noteikšanas veidi:

  • Globālais konteksts: ārpus funkcijas, this norāda uz globālo objektu (window pārlūkprogrammā, global Node.js).
  • Parasts funkcijas izsaukums: ne-stingrā režīmā (strict mode) this arī norāda uz globālo objektu (vai undefined, ja funkcija tiek izsaukta kā objekta metode, bet šis objekts ir null vai undefined). Stingrā režīmā, this ir vienāds ar undefined.
  • Objekta metode: ja funkcija tiek izsaukta kā objekta metode (t.i., caur punktu operatoru .), this norāda uz šo objektu.
  • Konstruktors: izmantojot new operatoru, this norāda uz jauno izveidoto objekta instanci.
  • call(), apply(), bind() metodes: Šie metodes ļauj skaidri noteikt this vērtību funkcijas izsaukšanas laikā. bind() atgriež jaunu funkciju ar piesaistītu this, kamēr call() un apply() izsauc funkciju ar norādītu this.
  • Līnijas funkcijas: Līnijas funkcijas nav savas this. this līnijas funkcijā mantojas no apkārtējās vides, kurā tā tika definēta.

Piemēri:

// Globālais konteksts
console.log(this === window); // true (pārlūkprogrammā)

// Parasts funkcijas izsaukums
function myFunction() {
  console.log(this);
}
myFunction(); // window (ne- stingrā režīmā)

// Objekta metode
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Konstruktors
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // jauna objekta instances

// 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

// Līnijas funkcija
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (ja definēta globālā kontekstā)

Saprotot, kā this tiek noteikts dažādos kontekstos, ir būtiski rakstīt pareizu JavaScript kodu.