Sobes.tech
Junior

Ин чӣ дар JavaScript аст?

sobes.tech AI

Ҷавоб аз AI

this дар JavaScript — калидвое слово, якое паказвае на кантэкст выканання функцыі. Яго значэнне вызначаецца у залежнасці ад таго, як выклікаецца функцыя.

Звычайна, this паказвае на глабальны аб'ект (у браўзэры window) пры звычайным выкліку функцыі, калі не ў строгім рэжыме.

У строгім рэжыме ('use strict') у тым жа сцэнарыі this будзе undefined.

Пры выкліку метада аб'екта this спасылаецца на сам аб'ект.

const obj = {
  method: function() {
    console.log(this); // obj
  }
};
obj.method();

Пры выкарыстанні канструктара (new з функцыяй), this паказвае на новы створаны экземпляр аб'екта.

function Constructor() {
  console.log(this); // экземпляр Constructor
}
const instance = new Constructor();

Пры выкарыстанні метадаў call, apply, bind, this яўна ўсталёўваецца як першы аргумент.

function greet() {
  console.log(`Прывітанне, ${this.name}!`);
}

const person = { name: 'Alicia' };

greet.call(person); // Прывітанне, Alicia!
greet.apply(person); // Прывітанне, Alicia!

const boundGreet = greet.bind(person);
boundGreet(); // Прывітанне, Alicia!

У стрэлкавых функцыях (Arrow Functions) this не мае ўласнага кантэксту. Яна лексічна наследуецца з той вобласці, дзе была вызначана.

const obj2 = {
  name: 'Bob',
  greet: function() {
    const arrowGreet = () => {
      console.log(`Прывітанне ад ${this.name}!`); // this адносіцца да obj2
    };
    arrowGreet();
  }
};
obj2.greet(); // Прывітанне ад Bob!

const obj3 = {
  name: 'Charlie',
  greet: () => {
    console.log(`Прывітанне ад ${this.name}!`); // this адносіцца да window (ці undefined у строгім рэжыме), не да obj3
  }
};
obj3.greet(); // Прывітанне ад undefined! (ці памылка)

Кантэкст this можа быць не зусім зразумелым, асабліва пры перадачы callback-аў або ў асінхронных аперацыях. Разуменне правілаў this з'яўляецца крытычным для карэктнай працы JavaScript.