Takip et

JavaScript’te call(), apply() ve bind() Metotları: Detaylı Anlatım





JavaScript’te call(), apply() ve bind() Metotları

JavaScript’te call(), apply() ve bind() Metotları: Detaylı Anlatım

JavaScript’te fonksiyonlar birinci sınıf nesnelerdir; bu, değişkenlere atanabilir, fonksiyonlara parametre olarak geçirilebilir ve fonksiyonlardan döndürülebilirler anlamına gelir. Bu özelliğin bir sonucu olarak, JavaScript fonksiyonlarının çalışma şeklini değiştirmemize olanak tanıyan birkaç kullanışlı yöntem sunar. Bunlardan en dikkat çekenleri ise call(), apply() ve bind() metotlarıdır. Bu makalede, bu metotların ne işe yaradığını, aralarındaki farkları ve nasıl kullanılacağını detaylı bir şekilde inceleyeceğiz.

call() Metodu

call() metodu, bir fonksiyonu hemen çağırır ve this bağlamını açıkça belirlemenizi sağlar. İlk parametre olarak, fonksiyonun içinde this olarak referans edilecek nesneyi alır. Ardından, fonksiyona geçireceğiniz parametreleri sıralı olarak belirtirsiniz.


function selamla(ad, soyad) {
  console.log("Merhaba, " + ad + " " + soyad + "!");
}

const kişi = { ad: "Fatih", soyad: "Soysal" };

selamla.call(kişi, "Ahmet", "Yılmaz"); // Merhaba, Ahmet Yılmaz! yazdırır.
selamla.call(kişi); // Merhaba, undefined undefined! yazdırır.

Gördüğünüz gibi, call() metodu ile selamla fonksiyonunu kişi nesnesi bağlamında çalıştırdık. Ancak, parametreleri eksik verdiğimizde, undefined değerleri kullanıldı. Bu durum, apply metodu ile daha kolay yönetilebilir. Örneğin, kendi sitemde bu konuyu daha geniş kapsamlı ele alıyorum.

apply() Metodu

apply() metodu da call() gibi bir fonksiyonu hemen çağırır ve this bağlamını belirler. Ancak, parametreleri bir dizi (array) olarak alır. Bu, parametre sayısı önceden bilinmeyen durumlarda oldukça kullanışlıdır.


function topla() {
  let toplam = 0;
  for (let i = 0; i < arguments.length; i++) {
    toplam += arguments[i];
  }
  return toplam;
}

const sayilar = [1, 2, 3, 4, 5];
const toplam = topla.apply(null, sayilar); // toplam = 15 olur
console.log(toplam);

Bu örnekte, apply() metodu sayesinde sayilar dizisindeki tüm sayıları toplayabiliyoruz. null, this bağlamının kullanılmadığını gösteriyor.

bind() Metodu

bind() metodu ise call() ve apply() metotlarından farklı olarak fonksiyonu hemen çağırmaz. Bunun yerine, belirtilen this bağlamı ve parametrelerle yeni bir fonksiyon oluşturur. Bu yeni fonksiyon daha sonra istenildiği zaman çağrılabilir.


function selamla(ad) {
  console.log("Merhaba, " + this.ad + "! Benim adım " + ad + ".");
}

const kişi = { ad: "Fatih" };
const yeniFonksiyon = selamla.bind(kişi, "Ahmet");

yeniFonksiyon(); // Merhaba, Fatih! Benim adım Ahmet. yazdırır.

Yukarıdaki örnekte, bind() metodu ile selamla fonksiyonunun yeni bir kopyası oluşturulmuş ve bu kopya kişi nesnesi bağlamında ve "Ahmet" parametresi ile çağrılacak şekilde ayarlanmıştır. Sonuç olarak, yeniFonksiyon() çağrıldığında istenen çıktı elde edilir. Bu özellikle event handler'larda veya callback fonksiyonlarında oldukça faydalıdır.

call(), apply() ve bind() Arasındaki Farklar

| Metot | Hemen Çağırır mı? | Parametreler |
|---|---|---|
| call() | Evet | Sıralı olarak |
| apply() | Evet | Dizi olarak |
| bind() | Hayır | Sıralı olarak, yeni fonksiyon oluşturur |

Özetle, call() ve apply() metotları fonksiyonları hemen çalıştırırken, bind() metodu yeni bir fonksiyon bağlamı oluşturur. Parametre alma şekilleri de farklıdır. Doğru metodu seçmek, kodunuzun okunabilirliğini ve sürdürülebilirliğini artırır.

Umarım bu detaylı açıklama JavaScript'teki call(), apply() ve bind() metotlarını anlamanıza yardımcı olmuştur. Daha fazla bilgi için Mozilla Developer Network'ü inceleyebilirsiniz.

Daha fazla JavaScript eğitimi için web sitemi ziyaret edebilirsiniz.

#Etiketler: JavaScript, call, apply, bind, fonksiyonlar, this, bağlam, parametreler, programlama, web geliştirme


Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.