Sobes.tech
Junior

JavaScript'te this nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

JavaScript'te this, bir fonksiyonun yürütüldüğü bağlamı gösteren anahtar kelimedir. Değeri, fonksiyonun nasıl çağrıldığına göre belirlenir.

Genellikle, normal fonksiyon çağrısında this, tarayıcıda window olan küresel nesneye işaret eder, eğer katı modda değilse.

Katı mod ('use strict')da, aynı senaryoda this undefined olur.

Bir nesnenin metodunu çağırırken, this nesneye kendisi referans verir.

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

Bir yapıcı fonksiyon (new ile) çağrıldığında, this yeni oluşturulan örneğe işaret eder.

function Constructor() {
  console.log(this); // Constructor örneği
}
const instance = new Constructor();

call, apply, bind metodları kullanıldığında, this açıkça ilk argüman olarak ayarlanır.

function greet() {
  console.log(`Merhaba, ${this.name}!`);
}

const person = { name: 'Ali' };

greet.call(person); // Merhaba, Ali!
greet.apply(person); // Merhaba, Ali!

const boundGreet = greet.bind(person);
boundGreet(); // Merhaba, Ali!

Ok fonksiyonlarında (Arrow Functions), this kendi bağlamına sahip değildir. Leksik olarak, tanımlandığı kapsamdan miras alınır.

const obj2 = {
  name: 'Bob',
  greet: function() {
    const arrowGreet = () => {
      console.log(`Merhaba, ${this.name}!`); // this, obj2'ye referans eder
    };
    arrowGreet();
  }
};
obj2.greet(); // Merhaba, Bob!

const obj3 = {
  name: 'Charlie',
  greet: () => {
    console.log(`Merhaba, ${this.name}!`); // this, window (veya katı modda undefined) referans eder, obj3'e değil
  }
};
obj3.greet(); // Merhaba, undefined! (veya hata)

this bağlamı, özellikle geri çağırma fonksiyonları veya asenkron işlemler sırasında belirsiz olabilir. this kurallarını anlamak, JavaScript'in doğru çalışması için kritiktir.