Sobes.tech
Junior

'this' anahtar kelimesi nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

this JavaScript'te, şu anda çalışan kodun bağlamında referans verilen nesneye işaret eden anahtar kelimedir. Değeri, fonksiyonun nasıl çağrıldığına göre belirlenir.

this'in tanımlanmasının temel yolları:

  • Küresel bağlam: Bir fonksiyon dışında, this küresel nesneye (window tarayıcıda, global Node.js'te) işaret eder.
  • Normal fonksiyon çağrısı: Kısıtlamasız modda (strict mode), this yine küresel nesneye işaret eder (veya fonksiyon, bir nesnenin yöntemi olarak çağrılırsa ve bu nesne null veya undefined ise, undefined olur). Kısıtlamalı modda, this undefined'dır.
  • Nesne yöntemi: Eğer fonksiyon bir nesnenin yöntemi olarak çağrılırsa (yani nokta operatörü . kullanılarak), this yöntemi sahip olan nesneye işaret eder.
  • Yapıcı (Constructor): new operatörü kullanıldığında, this yeni oluşturulan nesne örneğine işaret eder.
  • call(), apply(), bind() metodları: Bu metodlar, fonksiyon çağrılırken this değerini açıkça ayarlamaya izin verir. bind() yeni bir fonksiyon döner ve this bağlanır, call() ve apply() ise fonksiyonu belirtilen this ile çağırır.
  • Ok fonksiyonları (Arrow functions): Ok fonksiyonlarının kendi this'i yoktur. this bir ok fonksiyonunda, tanımlandığı çevresel bağlamdan lexikal olarak miras alınır.

Örnekler:

// Küresel bağlam
console.log(this === window); // true (tarayıcıda)

// Normal fonksiyon çağrısı
function myFunction() {
  console.log(this);
}
myFunction(); // window (kısıtlamasız modda)

// Nesne yöntemi
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Yapıcı
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // yeni nesne örneği

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

// Ok fonksiyonu
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (küresel bağlamda tanımlandıysa)

Farklı bağlamlarda this'in nasıl belirlendiğini anlamak, doğru JavaScript kodu yazmak için kritiktir.