Javascript 7 | Call, Apply Bind

Ömer Çelik
1 min readDec 2, 2019

--

Call, apply ve bind bir fonksiyonu farklı objelerle kullanabilmemizi sağlar.
Eğer kalıtım ile field’lari aktarmak istersek call’i kullanabiliriz.
Üstteki sınıfın constructor’ini call sayesinde kullanabiliriz.

Bu işlemimizin sonucu NaN’dir. Çünkü asıl problem buradaki this objesidir. Zaten mantığımızı kullanarak baktığımız da this objesi hangisine bakmali(obje1, obje2). Hangisine bakabilir ki?
Buradaki cevap this objesi window objemize bakiyor. Peki biz bu fonksiyonu böyle bir durumda farklı farklı objelerle nasıl kullanabiliriz?

Öncelikli olarak call methoduna bakalim:
addNumbers.call(obje1, 100,200)
addNumbers.call(obje2, 100, 200)

kullanarak yapabiliriz.

Bind Keyword

Burada tellAge methodu içerisindeyken this person objemizi gösteriyor ve age field’ina erişebiliyoruz. Ancak person objesi içerisinde tellAge methodu dışındayken this keywordü window objesini göstermektedir. Yani bind this yaparsak artık age’e erişemeyiz. Yada arrow function olarak yazsaydık yine erişemezdik.

Çıktı :
Window
undefined

Şimdi ise başta bahsettiğim call, apply keyword’lerini inheritance’ın neresinde kullanıyoruz. Ama belirtmeliyim ki Es6 ile birlikte prototype tabanlı inheritance’a gerek kalmadı. Şimdi güzel bir örnek ile açıklayalım;

Employee.prototype = Object.create(Person.prototype);
const emp1 = new Employee(“Omer”, 25, 25);

Burada 2 tane dikkat edilmesi gereken nokta var. Birisi person içerisindeki showInfos() methodunu prototype’i kullanarak inheritance yoluyla aldik.
Üstteki Person sinifinin constructor’ini ise yani name ve age’i ise call methodu
sayesinde kullandik. Burada hem call hemde prototype’in nerede kullanabildiğimizin basit bir örneğini görmüş olduk..

Makalelerimin tamamına erişmek isteyen arkadaşlar için hepsinin linkinin bulunduğu bir tutorial hazırladım. Aşağıdaki linkte paylaşıyorum.

https://medium.com/@omercelikceng/javascript-makalelerimin-tamam%C4%B1-45a71ac3b386

--

--