Sobes.tech
Junior

Калидвожа 'this' чист?

sobes.tech AI

Ҷавоб аз AI

this калимаи калидии дар JavaScript мебошад, ки ба объект ишора мекунад, ки дар контексти он коди ҳозира иҷро мешавад. Қимати он аз роҳи даъвати функсия муайян карда мешавад.

Роҳҳои асосии муайян кардани this:

  • Контексти глобалӣ: Дар берун аз функсия, this ба объекти глобалӣ (window дар браузер, global дар Node.js) ишора мекунад.
  • Даъвати одии функсия: Дар режими номуайян (strict mode) this инчунин ба объекти глобалӣ ишора мекунад (ё undefined, агар функсия ҳамчун методи объект даъват шавад, аммо он объект null ё undefined бошад). Дар режими қатъӣ, this баробар ба undefined аст.
  • Методи объект: Агар функсия ҳамчун методи объект даъват шавад (яъне тавассути оператори нуқта .), this ба объекти, ки методро дорост, ишора мекунад.
  • Конструктор: Ҳангоми истифодаи оператори new, this ба намунаи навсозишудаи объект ишора мекунад.
  • Методҳои call(), apply(), bind(): Ин методҳо имкон медиҳанд, ки ба таври равшан қимати this дар вақти даъвати функсия муайян карда шавад. bind() функсияи навро бо this пайвастшуда бармегардонад, дар ҳоле ки call() ва apply() функсияро бо this муайяншуда даъват мекунанд.
  • Функсияҳои стрелка: Функсияҳои стрелка дорои this-и худ нестанд. this дар функсияи стрелка лексикалӣ аз муҳити атрофи он, ки дар он таъриф шудааст, мерос мегирад.

Маслиҳатҳо:

// Контексти глобалӣ
console.log(this === window); // true (дар браузер)

// Даъвати одии функсия
function myFunction() {
  console.log(this);
}
myFunction(); // window (дар режими номуайян)

// Метод дар объект
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Конструктор
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // намунаи нав

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

// Функсияи стрелка
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (агар дар контексти глобалӣ таъриф шудааст)

Фаҳмидани он, ки this дар контекстҳои гуногун чӣ гуна муайян мешавад, барои навиштани коди дуруст дар JavaScript муҳим аст.