JavaScript Nesne Yönelimli Programlama
Bir çok programlama dili tarafından desteklenen ve JavaScript içerisinde yer alan OOP veya Nesne Yönelimli Programlama ile ilgili bilgiler yer alıyor.
Javascript içerisinde yer alan her şey bir nesnedir.
- Boolean veri türü nesne olabilir. (new anahtar kelimesi ile)
- Number veri türü nesne olabilir. (new anahtar kelimesi ile)
- String veri türü nesne olabilir. (new anahtar kelimesi ile)
- Date her zaman bir nesnedir.
- Math her zaman bir nesnedir.
- Array her zaman bir nesnedir.
- Function her zaman bir nesnedir.
- Object her zaman bir nesnedir.
Temel veri türleri haricinde tüm JavaScript değerleri bir nesnedir.
JavaScript temel veri türleri
Temel veri türleri özellik ve metotlara sahip olmayan değişken tipidir.
JavaScript temel veri türleri aşağıda yer almaktadır.
- string
- number
- boolean
- null
- undefined
Nesneler
JavaScript değişkenleri tek değer saklar.
<script>
var kisi = "Yusuf SEZER"
console.log(kisi);
</script>
JavaScript nesneleri de değişkendir.
Ancak nesneler birden fazla değer saklayabilir.
Nesne değerleri ad:değer çifti olarak yazılır. (ad ve değer iki nokta (:) ile ayrılır)
<script>
var kisi = {adi:"Yusuf", soyAdi:"SEZER", yas:75};
console.log(kisi.adi + " " + kisi.soyAdi);
</script>
JavaScript ile oluşturulan nesneler çeşitli değerlere sahip olabilir bu değerler nesne özelliği olarak ifade edilir.
JavaScript nesne özellikleri
JavaScript nesnelerindeki adlandırılmış değerlere özellik denir.
Nesne özellikleri ad:değer çifti olarak saklanır.
Özellik | Değer |
---|---|
adi | Yusuf |
soyAdi | SEZER |
yas | 75 |
Nesne özelliklerine erişim
Nesne özelliklerine çeşitli şekilde erişilebilir.
nesneAdi.ozellikAdi
veya
nesneAdi["ozellikAdi"]
veya
nesneAdi[degisken] // degisken = "yas"; ise nesneAdi[yas]
Nesne özelliklerine erişim örneği aşağıda yer almaktadır.
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75
};
console.log("Merhaba ben " + kisi.adi + " " + kisi.soyAdi + " yaşım : " + kisi.yas);
</script>
veya
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75
};
console.log("Merhaba ben " + kisi["adi"] + " " + kisi["soyAdi"] + " yaşım : " + kisi["yas"]);
</script>
Tüm nesne özelliklerine erişim
JavaScript nesnelerine ait tüm özeliklere erişmek için for in döngüsü kullanılabilir.
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75
};
for (x in kisi) {
console.log(x + " " + kisi[x]);
}
</script>
Nesneye yeni özellik ekleme
Nesneye yeni özellik aşağıdaki gibi eklenebilir.
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75
};
kisi.gozRengi = "Siyah";
for (x in kisi) {
console.log(x + " " + kisi[x]);
}
</script>
Nesne özelliğini silme
JavaScript delete anahtar kelimesi nesne özelliğini ve değerini siler.
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75
};
delete kisi.yas;
console.log("Merhaba ben " + kisi.adi + " " + kisi.soyAdi + " yaşım : " + kisi.yas);
</script>
Silinen özellik tekrar eklenmeden kullanılamaz.
NOT: JavaScript’e ait nesneler delete ile silinirse JavaScript kodlarınız çalışmayabilir.
Özellik nitelikleri
JavaScript nesnelerine çeşitli kısıt getirmek için enumerable, configurable ve writable nitelikleri kullanılır.
Bu nitelikler özelliğin döngü ile okunabilir, delete anahtar kelimesi ile silinebilir ve yeni değer atayarak yazılabilir olup olmadığını belirtir.
<script>
var kisi = {};
Object.defineProperty(kisi, "adi", {
enumerable: false,
configurable: false,
writable: false,
value: "Yusuf"
});
delete kisi.adi; // configurable false silinemez
kisi.adi= "Cenk"; // writable false değiştirilemez
for (x in kisi) {
console.log(kisi[x]); // enumerable false döngü içinde kullanılamaz
}
</script>
Nesne metotları
Nesne metotları nesne içerisinde gerçekleşecek işlevlerin saklı olduğu fonksiyonlardır.
Nesne metotları fonksiyon tanımını içeren nesne özelliğidir.
Özellik | Değer |
---|---|
adi | Yusuf |
soyAdi | SEZER |
yas | 75 |
adiSoyadi | function() {return this.adi + ” ” + this.soyAdi;} |
NOT: JavaScript nesne metotlarını nesne özelliği olarak saklar.
Nesneye metot ekleme
Nesneye metot ekleme aşağıdaki gibidir.
metotAdi : function () { kod bloğu }
Nesne metotlarına erişim
Nesne içerisindeki bir metoda erişim aşağıdaki gibidir.
nesneAdi.metotAdi();
Nesne metoduna erişim örneği aşağıda yer almaktadır.
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75,
adiSoyad: function() {
return this.adi + " " + this.soyAdi;
}
};
console.log(kisi.adiSoyad());
</script>
Parantezler () unutulursa JavaScript fonksiyon tanımını döndürür.
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75,
adiSoyad: function() {
return this.adi + " " + this.soyAdi;
}
};
console.log(kisi.adiSoyad);
</script>
Nesne kurucusuna metot ekleme
Nesne kurucusuna metot ekleme kurucu fonksiyon içerisinde yapılır.
<script>
function Kisi(a, s, y) {
this.adi = a;
this.soyAdi = s;
this.yas = y;
this.adiDegistir = function (yeniAd) {
this.adi = yeniAd;
}
}
var mehmet = new Kisi("Mehmet", "SEZER", 45);
var yusuf = new Kisi("Cenk", "SEZER", 75);
console.log(yusuf.adi); // Cenk
yusuf.adiDegistir("Yusuf");
console.log(yusuf.adi); // Yusuf
</script>
kisi nesnesi adiDegistir metodu nesnenin sahip olduğu adi özelliğini değiştirmek için kullanır.
Yukarıdaki örnekte; mehmet ve yusuf nesneleri yer almaktadır.
Metot hangi nesnenin değişeceğini metot içerisindeki this anahtar kelimesi ile bilir.
Nesne oluşturma
Nesneler çeşitli şekillerde oluşturulabilir.
- Sabit değer (literal) ile nesne oluşturma ve tanımlama.
- new anahtar kelimesi ile nesne oluşturma ve tanımlama.
- Nesne kurucusu ile nesne oluşturma ve tanımlama.
Ayrıca ECMAScript 5 ile birlikte gelen Object.create fonksiyonu ile nesne oluşturabiliriz.
Sabit değer kullanarak oluşturma
JavaScript nesnesi oluşturmanın en kolay ve hızlı yoludur.
JavaScript sabit değeri (literal) kullanarak nesne oluşturabilir ve tanımlayabiliriz.
JavaScript sabit değer (literal) ile nesne süslü parantezler içerisinde ad:değer çifti ile tanımlanır. (Örn; yas:75)
Aşağıdaki örnekte üç özelliğe sahip kisi nesnesi yer almaktadır.
<script>
var kisi = {adi:"Yusuf", soyAdi:"SEZER", yas:75};
console.log("Merhaba ben " + kisi.adi + " " + kisi.soyAdi + " yaşım : " + kisi.yas);
</script>
Nesne özellikleri arasında boşluklar dikkate alınmaz.
Daha okunaklı bir yazım için birden fazla satıra bölünebilir.
<script>
var kisi = {
adi:"Yusuf",
soyAdi:"SEZER",
yas:75
};
console.log("Merhaba ben " + kisi.adi + " " + kisi.soyAdi + " yaşım : " + kisi.yas);
</script>
new anahtar kelimesi kullanarak oluşturma
Aşağıdaki örnekte üç özelliğe sahip kisi nesnesi oluşturulmuş ve tanımlanmıştır.
<script>
var kisi = new Object();
kisi.adi = "Yusuf";
kisi.soyAdi = "SEZER";
kisi.yas = 75;
console.log("Merhaba ben " + kisi.adi + " " + kisi.soyAdi + " yaşım : " + kisi.yas);
</script>
JavaScript sabit değer (literal) kullanarak oluşturma ve new anahtar kelimesi ile oluşturma aynı sonucu verecektir.
Basitlik, okunabilirlik ve daha hızlı çalışması bakımında sabit değer (literal) kullanmanızı tavsiye ederim.
Nesne kurucusunu kullanarak oluşturma
Sabit değer (literal) ve new anahtar kelimesi ile sadece bir nesne oluşturulur.
Bazen bir nesnenin birden fazla kopyasını oluşturmak isteyebiliriz.
Bir nesneden birden fazla kopyasını oluşturmak için nesne kurucusunu kullanarak nesne oluşturma kullanılır.
<script>
function Kisi(a, s, y) {
this.adi = a;
this.soyAdi = s;
this.yas = y;
}
var yusuf = new Kisi("Yusuf", "SEZER", 75);
var mehmet = new Kisi("Mehmet", "SEZER", 45);
</script>
Yukardaki kisi fonksiyonu bir nesne kurucusudur.
Nesne kurucusu ile bir nesnenin birden fazla kopyasını oluşturabilirsiniz.
<script>
var cenk = new kisi("Cenk", "YILMAZ", 30);
var selim = new kisi("Selim", "AKSOY", 29);
</script>
JavaScript this anahtar kelimesi
JavaScript nesne kurucusu içindeki this anahtar kelimesi nesne özellik ve fonksiyonlarına erişim için kullanılır.
Nesne kurucu fonksiyonunun dönüş değeri this anahtar kelimesi kullanılırsa dönüş değeri nesnenin kendisi olur.
JavaScript this değişken değildir.
Anahtar kelimedir.
Değeri değiştirilemez.
JavaScript kurucuları
JavaScript çeşitli nesne kurucularını barındırır.
<script>
var x1 = new Object(); // Yeni Object nesnesi
var x2 = new String(); // Yeni String nesnesi
var x3 = new Number(); // Yeni Number nesnesi
var x4 = new Boolean(); // Yeni Boolean nesnesi
var x5 = new Array(); // Yeni Array nesnesi
var x6 = new RegExp(); // Yeni RegExp nesnesi
var x7 = new Function(); // Yeni Function nesnesi
var x8 = new Date(); // Yeni Date nesnesi
</script>
JavaScript Math nesnesinin özellik ve fonksiyonları global olduğundan new anahtar kelimesi ile oluşturulmaz.
Sabit değer (literal) kullanmak
JavaScript içerisindeki değer alabilen her şey new anahtar kelimesi ile oluşturulabilir.
Ancak new anahtar kelimesi karmaşık ve yavaş çalışır.
Dizi oluştururken new Array() yerine [] sabit değeri (literal) kullanılabilir.
Düzenli ifade oluştururken new RegExp() yerine /()/ sabit değeri (literal) kullanılabilir.
Fonksiyon oluştururken new Function() yerine function() {} sabit değeri (literal) kullanılabilir.
Nesne oluştururken new Object() yerine {} sabit değeri (literal) kullanılabilir.
<script>
var x1 = {}; // Yeni object
var x2 = ""; // Yeni temel string türü
var x3 = 0; // Yeni temel number türü
var x4 = false; // Yeni temel boolean türü
var x5 = []; // Yeni array nesnesi
var x6 = /()/; // Yeni regexp nesnesi
var x7 = function() {}; // Yeni function nesnesi
</script>
JavaScript nesne değerleri değiştirilebilir
JavaScript nesnesi bir değişkene atandığında değişken artık nesnenin bellek adres bilgisini tutar.
Aşağıdaki örnekte x değişkeni kisi nesnesini kopyalamaz, kisi nesnesinin bellek adres bilgisini tutar.
<script>
var kisi = {adi:"Yusuf", soyAdi:"SEZER", yas:75};
var x = kisi;
</script>
Yukardaki tanımda kisi nesnesi ve x nesnesi aynı bellek alanını işaret eder.
x değişkeni ile yapılan değişiklik kisi nesnesini etkiler.
<script>
var kisi = {adi:"Yusuf", soyAdi:"SEZER", yas:75};
var x = kisi;
x.yas = 30;
console.log(kisi.yas); // 75 mi 30 mu?
</script>
JavaScript Derslerine buradan ulaşabilirsiniz…
Hayırlı günler dilerim.