Javascript Sınıf Mantığı

Herkese merhaba,

Çoğu insan Javascript i sadece bir betik dili olarak biliyor. Evet doğru Javascript bir betik dili ama neler yapmaya gücü yetiyor gördükçe, her geçen gün daha çok şaşırıyorum. Malum çağımız da artık internet ve bilgi çağı olduğuna ve önemli olan bilginin büyük çoğunluğu ağ üzerinde bulunduğuna göre işi yazılımla ilgili olan herkesin ucundan bucağından alakadar olduğu bir konu.

Javascript her ne kadar betik dili olarak geçse de, nesneye yönelik özellikler de gösteren bir dil. Bunun anlamı, encapsulation ından inheritance ına kadar pek çok nesne özelliğini bu dilde de kullanabildiğinizdir. Ben sizlere Javascript’teki sınıf mantığından biraz bahsedeyim.

Örnek basit bir Javascript sınıfı :

function testClass(){
this.attr1 = 'someAttr';
this.attr2 = 5;
this.increase = function(){
this.attr2 = this.attr2 + 5;
}

şeklinde verilebilir. Bu sınıfı çağırmak istediğinizde ise :

var obj - new testClass();
obj.attr1 - 'new attr';
obj.attr2 - 19;
obj.increase();
alert(obj.attr2);

Yalnız bu biçimdeki kullanımda bir sorun var. Bu nesneyi her oluşturduğunuzda sınıfın içindeki metodu da aynı şekilde yaratıyorsunuz. Ama aslında ihtiyacınız olan şey bir metodun tüm nesneler için çalışmasıdır. Ne gerek var o kadar çok nesne metoduna değil mi canım? O zaman ne yapıyoruz prototype kullanıyoruz, yani ön tanımlı nesnemize metodumuzu ekliyoruz. Bu sayede tek bir fonksiyonu bundan sonra tüm nesnelerimiz için tek bir bellek alanı karşılığında kullanabiliyoruz. Örnek vermek gerekirse :

testClass.prototype.increaseFunc - function(){
this.attr2 = this.attr2 + 5;
}

Metodun çağırılmasını aynı şekilde yapabilirsiniz. Aslında burada yaptığımız sınıfın özelliğini artırmak oldu bir anlamda. Mesela bu prototype nesnesini kullanarak String sınıfında normalde olmayan fonksiyonları da ekleyebilirsiniz. Güzel bir şey yani 🙂

İleride karşıma gene sizlere bahsedecek kadar ilginç javascript özellikleri çıktıkça paylaşmaya devam edeceğim, bir ara JQuery ve muhteşem fonksiyonlarına girmeyi de düşünüyorum.

Herkese iyi çalışmalar.