Bu ders için video bulunmamaktadır.
Ders İçeriği
Giriş
Gerçek dünyadaki birçok şeyi (bir araba, bir kişi, bir kitap) özellikleriyle tanımlarız. Örneğin, bir arabanın rengi, modeli, hızı gibi özellikleri vardır. JavaScript'te, bu tür gerçek dünya varlıklarını veya karmaşık veri yapılarını temsil etmek için nesneler (objects) kullanılır.
Nesneler, ilişkili verileri ve bu veriler üzerinde işlem yapabilen fonksiyonları (metodlar) bir arada tutan koleksiyonlardır. Dizilerden farklı olarak, nesnelerdeki veriler sıralı değildir ve anahtar-değer (key-value) çiftleri şeklinde saklanır. Her bir anahtar (key), nesne içinde benzersiz bir string veya semboldür ve bir değere (value) karşılık gelir. Değerler herhangi bir veri tipi olabilir (sayı, string, boolean, dizi, hatta başka bir nesne).
Bu derste, JavaScript nesnelerinin nasıl oluşturulduğunu, özelliklerine ve metodlarına nasıl erişildiğini, nesneler üzerinde nasıl döngü kurulduğunu ve nesnelerle ilgili diğer önemli kavramları öğreneceğiz.
Nesne Oluşturma
JavaScript'te nesne oluşturmanın birkaç yolu vardır:
1. Nesne Literali (Object Literal)
En yaygın ve basit yöntem, süslü parantezler {}
kullanarak nesne oluşturmaktır. Anahtar-değer çiftleri virgülle ayrılır ve anahtar ile değer arasına iki nokta üst üste :
konur.
Not: Anahtarlar (property names) genellikle string'lerdir. Tırnak içinde yazılmasalar bile JavaScript motoru tarafından string olarak yorumlanırlar (sayısal anahtarlar veya özel karakter içerenler hariç). Değerler ise herhangi bir JavaScript veri tipi olabilir.
2. Object Constructor
new Object()
yapıcısını kullanarak da boş bir nesne oluşturabilir ve daha sonra özelliklerini ekleyebilirsiniz. Ancak nesne literali genellikle daha okunabilir ve tercih edilir.
3. Constructor Fonksiyonları (İleriki Konu)
Benzer yapıdaki nesneleri tekrar tekrar oluşturmak için constructor fonksiyonları kullanılır. Bu konu, nesne yönelimli programlama derslerinde daha detaylı ele alınacaktır.
Nesne Özelliklerine Erişme ve Değiştirme
Nesne özelliklerine (property) erişmenin ve değerlerini değiştirmenin iki yolu vardır:
1. Nokta Notasyonu (Dot Notation)
En yaygın kullanılan yöntemdir. Nesne adından sonra bir nokta .
ve ardından özelliğin adı yazılır.
Uyarı: Nokta notasyonu, geçerli bir JavaScript tanımlayıcısı olmayan özellik adları için (örneğin, boşluk veya tire içerenler, sayıyla başlayanlar) kullanılamaz.
2. Köşeli Parantez Notasyonu (Bracket Notation)
Nesne adından sonra köşeli parantezler []
içine özelliğin adı (string olarak veya string içeren bir değişken) yazılır.
İpucu: Köşeli parantez notasyonu, özellik adının bir değişkende saklandığı veya geçerli bir JavaScript tanımlayıcısı olmadığı durumlarda kullanışlıdır.
Nesne Metodları
Bir nesnenin özelliği bir fonksiyon ise, bu özelliğe metod (method) denir. Metodlar, nesnenin verileri üzerinde işlem yapmak için kullanılır.
this
Anahtar Kelimesi
Metodların içinde kullanılan this
anahtar kelimesi, metodun çağrıldığı nesneyi ifade eder. Bu sayede metod, aynı nesnenin diğer özelliklerine erişebilir (örneğin, this.uzunluk
).
this
anahtar kelimesinin davranışı, fonksiyonun nasıl çağrıldığına bağlı olarak değişebilir. Ok fonksiyonlarında this
, fonksiyonun tanımlandığı kapsamdaki this
değerini alır, bu nedenle nesne metodları için genellikle geleneksel fonksiyon ifadeleri veya ES6 metod kısayolu kullanılır.
Uyarı: this
anahtar kelimesi JavaScript'in kafa karıştırıcı olabilen konularından biridir. Davranışı farklı durumlarda (global kapsam, fonksiyon çağrısı, metod çağrısı, constructor, olay yöneticileri, ok fonksiyonları) değişiklik gösterir. Bu konu ileriki derslerde daha detaylı ele alınacaktır.
Nesne Özellikleri Üzerinde Döngü
Bir nesnenin tüm özelliklerini (anahtarlarını ve değerlerini) dolaşmak için çeşitli yöntemler vardır:
1. for...in
Döngüsü
Nesnenin numaralandırılabilir (enumerable) özelliklerinin anahtarları (key) üzerinde döngü yapar. Bu, nesnenin kendi özelliklerinin yanı sıra prototip zincirinden miras aldığı özellikleri de içerebilir.
Not: for...in
döngüsü genellikle sadece nesnenin kendi özelliklerini işlemek istediğimizde hasOwnProperty()
metodu ile birlikte kullanılır.
2. Object.keys(nesne)
Nesnenin kendi numaralandırılabilir özelliklerinin anahtarlarını içeren bir dizi döndürür.
3. Object.values(nesne)
Nesnenin kendi numaralandırılabilir özelliklerinin değerlerini içeren bir dizi döndürür.
4. Object.entries(nesne)
Nesnenin kendi numaralandırılabilir özelliklerinin [anahtar, değer] çiftlerini içeren bir dizi döndürür.
Nesne Kopyalama ve Karşılaştırma
Nesne Kopyalama
Nesneleri bir değişkenden diğerine atadığınızda, aslında nesnenin kendisi kopyalanmaz, sadece bellekteki aynı nesneye işaret eden bir referans kopyalanır. Bu, bir değişken üzerinden yapılan değişikliğin diğerini de etkileyeceği anlamına gelir (shallow copy).
Nesnenin gerçek bir kopyasını (shallow copy - sığ kopya) oluşturmak için Object.assign()
veya spread operatörü (...
) kullanılabilir.
Uyarı: Object.assign()
ve spread operatörü sığ kopyalama (shallow copy) yapar. Yani, nesnenin sadece en üst seviyedeki özellikleri kopyalanır. Eğer özelliklerin değerleri de nesne veya dizi ise, onlar referans olarak kopyalanır. İç içe yapıların tamamen bağımsız kopyalarını oluşturmak için derin kopyalama (deep copy) teknikleri (örneğin, JSON.parse(JSON.stringify(nesne))
veya kütüphaneler) gerekir.
Nesne Karşılaştırma
İki nesne değişkeni, ancak bellekteki aynı nesneyi işaret ediyorlarsa ==
veya ===
ile karşılaştırıldığında true
döndürür. İçerikleri aynı olsa bile farklı nesneler false
döndürür.
Alıştırmalar
- Bir kitap nesnesi oluşturun (özellikler: baslik, yazar, sayfaSayisi, okunduMu (boolean)). Nesnenin bilgilerini konsola yazdırın.
- Kitap nesnesine, kitabın okundu durumunu değiştiren bir metod (
toggleOkundu
) ekleyin. - Bir film nesnesi oluşturun (özellikler: ad, yonetmen, yil, oyuncular (dizi)).
Object.keys()
kullanarak nesnenin tüm özellik adlarını konsola yazdırın. - Film nesnesindeki oyuncular dizisinin her bir elemanını
forEach
kullanarak konsola yazdırın. - İki farklı öğrenci nesnesi oluşturun. Bu nesnelerin içeriklerinin aynı olup olmadığını kontrol eden bir fonksiyon yazın (nesnelerin referanslarını değil, içeriklerini karşılaştırın).
Bu derste JavaScript nesnelerini ve özelliklerini öğrendik:
- Nesneler: Anahtar-değer çiftlerinden oluşan, ilişkili verileri ve metodları bir arada tutan koleksiyonlardır. Nesne literali
{}
ile oluşturulurlar. - Özellik Erişimi: Nokta notasyonu (
nesne.ozellik
) veya köşeli parantez notasyonu (nesne["ozellik"]
) ile yapılır. - Metodlar: Nesnenin fonksiyon olan özellikleridir. Nesnenin diğer özelliklerine erişmek için genellikle
this
anahtar kelimesini kullanırlar. - Nesne Üzerinde Döngü:
for...in
,Object.keys()
,Object.values()
,Object.entries()
metodları ile nesne özellikleri dolaşılabilir. - Kopyalama: Basit atama referans kopyalar. Sığ kopya için
Object.assign()
veya spread operatörü (...
) kullanılır. Derin kopyalama için ek teknikler gerekir. - Karşılaştırma: Nesneler referanslarına göre karşılaştırılır. İçerik karşılaştırması için manuel kontrol gerekir.
Nesneler, JavaScript'te karmaşık veri yapılarını modellemek ve programları organize etmek için temel bir yapı taşıdır. Dizilerle birlikte, JavaScript'teki en önemli veri yapılarından biridir.
Bir sonraki derste, web sayfalarının yapısını ve içeriğini değiştirmemizi sağlayan DOM (Document Object Model) manipülasyonuna giriş yapacağız.