JavaScript Dersleri

JavaScript'te this Anahtar Kelimesi

eminbasbayan

eminbasbayan

4 dk okuma
JavaScript'te this Anahtar Kelimesi
🔍 Büyütmek için tıklayın

JavaScript’te program yazarken sıklıkla karşılaşılan ve çoğu zaman geliştiricilerin kafasını karıştıran konulardan biri this anahtar kelimesidir. İlk bakışta masum gibi görünen bu kelime, bağlamına (context) göre değişkenlik gösterdiği için tam olarak neye işaret ettiğini anlamak zaman alabilir. Bu makalede, this kelimesini sade ve anlaşılır şekilde, özellikle yeni başlayan bir lise öğrencisinin anlayabileceği düzeyde açıklayacağız. Konuyu daha iyi kavrayabilmek için farklı örnekler kullanacağız ve yalnızca this ile ilgili temel kavramlara odaklanacağız.

this Nedir ve Neyi Gösterir?

JavaScript’te this, içinde bulunduğu bağlama göre bir nesneyi temsil eder. Genellikle bir nesne (object) içindeki metotlarda (function) kullanılır ve o metodu çağıran nesneyi gösterir.

Basitçe söylemek gerekirse:

  • this, “Beni çalıştıran nesne hangisi?” sorusunun cevabıdır.

Bir Nesne İçinde this Nasıl Çalışır?

Aşağıda bir örnek nesne tanımlayalım:

const student = { name: "Mert", grade: 11, introduce() { console.log(`${this.name} isimli öğrenci ${this.grade}. sınıfta`); } };

Bu kodda introduce isimli bir metot var. Bu metot çalıştığında this.name ve this.grade değerlerine ulaşır. Şimdi bu metodu çağıralım:

student.introduce();

Çıktı:

Mert isimli öğrenci 11. sınıfta

Burada this, student nesnesini temsil eder çünkü metot bu nesne üzerinden (student.) çağrıldı.

Peki Neden student.name Yerine this.name Kullanıyoruz? (Avantajı Ne?)

Bu çok önemli bir sorudur ve this anahtar kelimesinin gücünü ortaya koyar. this kullanmak, metotları yeniden kullanılabilir ve esnek hale getirir. Metot, hangi nesneye ait olduğunu bilmek zorunda kalmaz.

Farz edelim ki okulda Mert dışında Ayşe adında başka bir öğrenci daha var.

Yöntem 1: Kötü Yaklaşım (Doğrudan Nesne Adını Kullanmak)

Eğer metodu this yerine doğrudan student adıyla yazsaydık, kod şöyle görünürdü:

const student = { name: "Mert", grade: 11, introduce() { // DİKKAT: Metot, körü körüne 'student' nesnesine bağlı. console.log(`${student.name} isimli öğrenci ${student.grade}. sınıfta.`); } }; const student2 = { name: "Ayşe", grade: 10, // Mert'in tanışma metodunu Ayşe için "ödünç" alıyoruz. introduce: student.introduce }; student.introduce(); // Çıktı: Mert isimli öğrenci 11. sınıfta. (Beklendiği gibi) student2.introduce(); // Çıktı: Mert isimli öğrenci 11. sınıfta. (YANLIŞ SONUÇ!)

Gördüğünüz gibi, student2.introduce() çağırmamıza rağmen metot hala Mert'in bilgilerini yazdırdı. Çünkü metodun içi, esnek olmayan bir şekilde student nesnesine sabitlenmişti.

Yöntem 2: Doğru ve Esnek Yaklaşım (this Kullanmak)

Şimdi aynı senaryoyu this ile doğru bir şekilde yapalım:

const student = { name: "Mert", grade: 11, introduce() { // Harika! 'this', "beni kim çağırdıysa o" anlamına geliyor. console.log(`${this.name} isimli öğrenci ${this.grade}. sınıfta.`); } }; const student2 = { name: "Ayşe", grade: 10, // Aynı esnek metodu Ayşe için de kullanıyoruz. introduce: student.introduce }; student.introduce(); // this = student olur. Çıktı: Mert isimli öğrenci 11. sınıfta. student2.introduce(); // this = student2 olur. Çıktı: Ayşe isimli öğrenci 10. sınıfta.

this sayesinde introduce metodu bir şablon gibi davrandı. Kimin üzerinden çağrıldıysa onun kimliğine büründü ve doğru bilgileri yazdırdı.

Fonksiyonu Bir Değişkene Atarsak Ne Olur?

Şimdi yukarıdaki metodu bir değişkene atayalım:

const tanit = student.introduce; tanit();

Beklediğimiz sonucu alır mıyız? Hayır.

Çıktı şu şekilde olabilir:

undefined isimli öğrenci undefined. sınıfta

Neden böyle oldu?

Çünkü bu sefer introduce fonksiyonunu bir nesne üzerinden çağırmadık. tanit() çağrısı tek başına yapıldı. Artık JavaScript, this kelimesinin neyi göstermesi gerektiğini bilmiyor ve otomatik olarak en dıştaki nesneye, yani global objeye (tarayıcıda window) yönleniyor. Bu global objede name veya grade gibi değişkenler olmadığı için undefined alıyoruz.

Çağırma Şekli (Invocation Context) Neden Önemlidir?

JavaScript'te this, fonksiyonun tanımlandığı yere göre değil, nasıl çağrıldığına göre belirlenir. İşte bu yüzden student.introduce() ile çağırdığımızda this, student olur. Ama tanit() gibi tek başına çağırdığımızda artık bir çağıran nesne (context) kalmaz, dolayısıyla this, global objeyi temsil eder.

Global Alanda this Ne Anlama Gelir?

Tarayıcı ortamında en üst düzeydeki nesne window objesidir. Dışarıda, yani herhangi bir nesnenin içinde olmadan tanımlanan fonksiyonlar bu objeye ait sayılır.

Örnek:

console.log(this); // Tarayıcıda çalıştırıldığında 'window' nesnesini gösterir.

Herhangi bir nesne veya fonksiyonun dışında this kullandığınızda global nesneyi elde edersiniz.

Kısaca Özetleyelim:

  1. this, bulunduğu bağlama göre değişen özel bir kelimedir ve "beni çağıran nesne" demektir.
  2. Eğer bir fonksiyon bir nesne üzerinden (nesne.metot()) çağrılırsa, this o nesneyi gösterir.
  3. Fonksiyon bir değişkene atanıp bağımsız olarak (metot()) çağrılırsa, this artık global objeyi (window) gösterir.
  4. this kullanmanın en büyük avantajı, metotları yeniden kullanılabilir ve esnek yapmasıdır.

Öğrenciler İçin Tavsiye

  • this konusunu öğrenirken, örnekleri bol bol yazın ve konsola console.log(this) koyarak hangi değeri gösterdiğini test edin.
  • Kodun çıktısını ezberlemeyin, mantığını anlamaya çalışın.
  • Karışık gelen durumlarda kendinize şu soruyu sorun: "Bu fonksiyonu hangi nesne üzerinden çağırdım?" Eğer bir nesne yoksa, cevap global nesnedir.

this kelimesi JavaScript'in güçlü ama dikkatli kullanılmazsa karmaşa yaratabilen bir parçasıdır. Zamanla, daha fazla örnek görerek ve uygulayarak içselleştireceğiniz bu konu, kod yazarken size büyük esneklik sağlayacak. Unutmayın, bu kelime başlangıçta zor gibi görünse de, düzenli tekrar ve doğru örneklerle tamamen anlaşılır hale gelir.

Etiketler

#Eğitimler#JavaScript Dersleri

İlgili Yazılar

Bu konuyla ilgili diğer yazılarımızı da inceleyebilirsiniz

Web Geliştirmede Neden JavaScript'e İhtiyacımız Var?
JavaScript Dersleri

Web Geliştirmede Neden JavaScript'e İhtiyacımız Var?

Web geliştirme, temel olarak üç ana yapı taşı üzerine kuruludur: **HTML, CSS ve JavaScript**. Bu üçlüden **HTML**, sayfanın iskeletini oluşturur, **CSS**, tasarımı ve görsel düzenlemeleri yapar

2 dk
JavaScript'e Giriş: JavaScript Nedir?
JavaScript Dersleri

JavaScript'e Giriş: JavaScript Nedir?

Web geliştirme yolculuğunuzda büyük bir adım atıyorsunuz! HTML ve CSS ile statik web sayfaları oluşturmayı öğrendiniz, ancak şimdi JavaScript ile sayfanıza hareket ve etkileşim katmanını eklemeye hazırsınız. JavaScript, web sayfalarını dinamik hale getiren ve kullanıcı etkileşimlerini yöneten

3 dk
JavaScript Değişkenler (Variables) Nedir?
JavaScript Dersleri

JavaScript Değişkenler (Variables) Nedir?

JavaScript, web geliştirme dünyasının en önemli dillerinden biridir. Dinamik web siteleri, interaktif uygulamalar, oyunlar ve animasyonlar gibi birçok alanda kullanılır. Ancak, bu tür gelişmiş uygulamalar oluşturabilmek için önce JavaScript'in temellerini anlamak gerekir. Bu

4 dk
JavaScript İlkel (Primitive) Veri Tipleri
JavaScript Dersleri

JavaScript İlkel (Primitive) Veri Tipleri

JavaScript, modern web geliştirmede vazgeçilmez bir programlama dilidir. Web sitelerini daha dinamik hale getirmek, etkileşim eklemek ve hatta oyunlar ve uygulamalar geliştirmek için kullanılır. Ancak, bu eğlenceli ve güçlü özelliklere ulaşmadan önce, JavaScript'in temellerin

4 dk
JavaScript'te Sayılar ve Matematiksel Operatörler
JavaScript Dersleri

JavaScript'te Sayılar ve Matematiksel Operatörler

JavaScript, modern web geliştirmede en yaygın kullanılan programlama dillerinden biridir. Bu dilde çalışırken sayılarla sıkça işlem yaparız. İster bir hesap makinesi uygulaması geliştiriyor olun, ister bir oyundaki puan sistemini kodluyor olun, sayılar kaçınılmaz bir parçadır. JavaScri

4 dk
JavaScript'te Boolean Veri Tipi
JavaScript Dersleri

JavaScript'te Boolean Veri Tipi

JavaScript'ı öğrenmeye yeni başlayanlar için veri tipleri oldukça önemlidir. Bu yazıda, en temel veri tiplerinden biri olan **Boolean (mantıksal) değerleri** inceleyeceğiz. Boolean değerleri, programlamada sıklıkla kullanılan ve kodlarımızın man

3 dk