JavaScript’te “Explicit Binding”: “call()” – “apply()” – “bind()” Metotları

Bu yazımızda, JavaScript’te fonksiyonların çağrıldıkları bağlamı (yani “this” değerini) özellikle belirlememize olanak tanıyan “explicit binding” kavramını inceleyeceğiz.

“Explicit Binding” ve “call()”, “apply()”, “bind()” Metotları

JavaScript’te, this anahtar kelimesinin referans aldığı nesneyi bazen doğrudan belirtmek isteyebiliriz. “Explicit binding” olarak adlandırılan bu işlemi gerçekleştirebilmek için call, apply ve bind metodlarından faydalanarak this‘in hangi nesneye karşılık geleceğini spesifik olarak belirleyebiliriz.

“Explicit binding”, özellikle dinamik doğası nedeniyle JavaScript’teki this değerinin tahmin edilmesi zor olabileceği durumlarda oldukça kullanışlı olmaktadır. Bu metodları daha yakından inceleyelim:

  • call() metodu, bir fonksiyonu çağırmak ve bu çağrıyı belirli bir nesne içinde gerçekleştirmek için kullanılır. Bu yöntemi kullanarak, fonksiyonun hangi nesneye ait olduğunu belirleyebiliriz. Metodumuzun ilk argümanı, fonksiyonun çağrıldığı bağlamı (yani this değerini) belirlerken, diğer argümanlar, fonksiyona iletilir.

Yukarıdaki örneğimizde, call metodu greet fonksiyonunu person nesnesi içinde çağırdık ve this.name ifadesi ile person nesnesinin name özelliğini kullandık. Ayrıca, “Merhaba” şeklinde yazılmış argümanı da fonksiyona ilettik. Örneğimizi biraz daha genişletelim:

Bu örneğimizde ise call metodu iki argüman almıştır. İlk argüman, fonksiyonun çağrıldığı bağlamı (yani this değerini) belirler (person nesnesi). İkinci argüman "Merhaba" greeting parametresine ve üçüncü argüman "Istanbul" ise location parametresine atanmıştır.

  • apply() metodu da call() metodu ile benzerlik göstermektedir. Ancak argümanları bir dizi içinde alır. Haliyle, fonksiyona birden fazla argümanı tek bir dizi içinde iletmemiz gerektiğinde kullanışlıdır. Örneğin:

Bu örnekte, apply yöntemini kullanarak greet fonksiyonunu person nesnesi bağlamında çağırdık ve “Merhaba” ve “Istanbul” argümanlarını ilettik. Bu işlem sonucunda “Merhaba, John , Istanbul gezin nasıldı?” çıktısını ürettik

  • bind() metodu ise diğer ikisinden farklı olarak bir fonksiyonu belirli bir bağlama bağlar, ancak hemen çağırmaz. Bunun yerine, bağlanmış yeni bir fonksiyon döndürür. Özellikle, fonksiyonun ileride çağrılması gerektiği durumlarda kullanışlıdır. Örneğin:

Yukarıdaki son örneğimizde, bind metodunu kullanarak greet fonksiyonunu person nesnesi bağlamına bağladık ve bu bağlanmış fonksiyonu boundGreet adıyla tanımladık. Sonrasında boundGreet fonksiyonunu çağırdığımızda, “Merhaba, John” çıktısını elde ettik.

Bu metotlar genellikle this değerini belirli bir objeye zorlaama amacıyla implicit binding yerine kullanılır.

İlgili Makaleler

Bir yanıt yazın

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

Başa dön tuşu