Tüm blog yazıları

JavaScript’te this ve Arrow Function

JavaScript, güçlü ve esnek bir programlama dili olsa da bazı konuları ilk başta anlamak zor olabilir. Bu konulardan biri de this anahtar kelimesinin davranışıdır. Özellikle arrow function (ok fonksiyonları) ile birlikte kullanıldığında, this’in nas

eminbasbayan3 dk okuma
JavaScript’te this ve Arrow Function

JavaScript, güçlü ve esnek bir programlama dili olsa da bazı konuları ilk başta anlamak zor olabilir. Bu konulardan biri de this anahtar kelimesinin davranışıdır. Özellikle arrow function (ok fonksiyonları) ile birlikte kullanıldığında, this’in nasıl çalıştığını anlamak birçok geliştirici için kafa karıştırıcı olabilir. Ancak, konuyu doğru örneklerle ve sade bir dille ele alırsak, bu karışıklığın yerini net bir anlayışa bırakması mümkündür. Bu makalede, sadece this ile arrow function arasındaki ilişkiyi detaylı ve açıklayıcı şekilde inceleyeceğiz.

this Nedir?

this, JavaScript'te bir fonksiyonun hangi nesne bağlamında çalıştığını belirtmek için kullanılan özel bir kelimedir. Fonksiyonlar çalıştırıldığında this dinamik olarak değişebilir. Yani this’in değeri, fonksiyonun nerede tanımlandığından değil, nasıl çağrıldığından etkilenir.

Basit bir örnekle açıklayalım:

jsx
const ogrenci = {
  ad: "Mehmet",
  selamla: function () {
    console.log("Merhaba, ben " + this.ad);
  }
};

ogrenci.selamla(); // Merhaba, ben Mehmet

Burada this.ad, ogrenci.ad anlamına gelir. Çünkü selamla fonksiyonu ogrenci üzerinden çağrılmıştır.

Arrow Function ile this Farklı Çalışır

Arrow function'ların en büyük farklarından biri, this değerini kendi bağlamından değil, tanımlandığı dış çevreden almasıdır. Bu özelliği nedeniyle bazı durumlarda işleri kolaylaştırırken, bazı durumlarda da hata kaynağı olabilir.

Aşağıdaki örnekte bu fark net bir şekilde görülebilir:

jsx
const kitap = {
  baslik: "Sinekli Bakkal",
  yazdir: () => {
    console.log(this.baslik);
  }
};

kitap.yazdir(); // undefined

Burada this, kitap nesnesini göstermez. Çünkü arrow function, this değerini tanımlandığı yerden yani global alandan alır. Global alanda baslik adında bir özellik olmadığı için sonuç undefined olur.

Doğru Kullanım: Nesne Metotlarında Normal Fonksiyon

Bir nesneye ait metodun içinde this kullanmak istiyorsak, arrow function kullanmamalıyız. Bunun yerine klasik fonksiyon ifadesi tercih edilmelidir.

jsx
const kitap = {
  baslik: "Saatleri Ayarlama Enstitüsü",
  yazdir: function () {
    console.log(this.baslik);
  }
};

kitap.yazdir(); // Saatleri Ayarlama Enstitüsü

Bu kullanımda this, doğru şekilde kitap nesnesini temsil eder.

Zamanlayıcı Fonksiyonlarda (setTimeout) Arrow Function Avantajı

Bazı özel durumlarda arrow function kullanmak işleri kolaylaştırır. Örneğin setTimeout gibi zaman gecikmesi içeren işlemlerde this bağlamı değişir ve bu da istenmeyen sonuçlara yol açabilir.

Aşağıdaki örneği inceleyelim:

jsx
const oyuncu = {
  isim: "Ayşe",
  tanit: function () {
    setTimeout(function () {
      console.log("Oyuncu: " + this.isim);
    }, 2000);
  }
};

oyuncu.tanit(); // 2 saniye sonra: Oyuncu: undefined

Burada this, setTimeout fonksiyonunun içindeki global bağlamı gösterdiği için this.isim undefined olur.

Aynı örneği arrow function ile yazarsak:

jsx
const oyuncu = {
  isim: "Ayşe",
  tanit: function () {
    setTimeout(() => {
      console.log("Oyuncu: " + this.isim);
    }, 2000);
  }
};

oyuncu.tanit(); // 2 saniye sonra: Oyuncu: Ayşe

Bu sefer this, dıştaki tanit fonksiyonundan devralındığı için doğru şekilde oyuncu nesnesini gösterir.

Özet: Arrow Function ve this Hakkında Bilmen Gerekenler

ÖzellikNormal FonksiyonArrow Function
this Nereden Gelir?Çağrıldığı yere göreTanımlandığı yere göre
Nesne Metodu Olarak Kullanılır mı?EvetGenellikle hayır
Zamanlayıcılarda (setTimeout) this Sorununu Çözer mi?HayırEvet

Sonuç

JavaScript'te this kelimesi çoğu zaman anlaşılması zor bir yapı gibi görünse de, arrow function'lar ile nasıl farklı çalıştığını anladığınızda birçok hatayı önceden görebilirsiniz. Kural basittir: Arrow function, this değerini bulunduğu ortamdan alır. Bu yüzden nesne metodları için uygun değildir ama zaman gecikmesi gibi durumlarda çok işe yarar.

Konunun özü şu: Arrow function’lar this konusunda özel bir davranış sergiler. Nerede kullanılacağını iyi bilmek, kodunuzun sorunsuz çalışmasını sağlar.

JavaScript Classes ile pratik uygulamalar, metotlar arası iletişim ve gerçek dünya kod örnekleri
JavaScript Dersleri9 dk okuma

JavaScript Classes - Pratik Uygulamalar

JavaScript class'ları ile pratik uygulamalara geçin! Metotlar arası iletişimden constructor'da metot çağırmaya, kod tekrarını azaltmaktan gerçek dünya senaryolarına kadar class kullanımının inceliklerini keşfedin. Kendi alışveriş sepeti örneğinizle bilginizi pekiştirin.

Yazıyı oku
JavaScript class yapısını gösteren bir kod örneği, ES6 ile modern nesne oluşturma
JavaScript Dersleri9 dk okuma

JavaScript Classes

ES6 ile JavaScript'e gelen class yapısı sayesinde nesne oluşturmak artık çok daha kolay ve düzenli! Constructor function karmaşasından kurtulup, okunabilir ve yönetilebilir kodlar yazmak isteyenler için modern JavaScript'in temel taşı olan class'ları tüm detaylarıyla keşfedin. Bu rehberle nesne şabl

Yazıyı oku
JavaScript kodunda Constructor Function ve new keyword'ü ile nesne oluşturma örnekleri
JavaScript Dersleri8 dk okuma

Constructor Functions ve new Keyword

Factory Function'ların hafıza israfı sorununa Constructor Function'lar ve new keyword'ü ile son verin! Metotları paylaştırarak JavaScript objelerini daha verimli nasıl oluşturacağınızı, new'in perde arkasında neler yaptığını ve prototype sisteminin gücünü bu rehberde keşfedin.

Yazıyı oku

Çerez tercihlerin

Platformun çalışması için zorunlu çerezler kullanıyoruz. İzin verirsen anonim kullanım verilerini ölçüyoruz. Ayrıntıları incele