JavaScript’te ‘this’ Anahtar Kelimesi: Tam Anlayış
JavaScript’teki this anahtar kelimesi, yeni başlayanlar için oldukça kafa karıştırıcı olabilir. Ancak, bir kez kavrandığında, JavaScript’in temel dinamiklerinden biri olarak önemini anlamak kolaylaşacaktır. Bu makalede, this‘in farklı bağlamlardaki davranışını örneklerle açıklayarak, bu konuyu tamamen anlamanıza yardımcı olacağım.
this‘in Bağlamı Anlamak
this anahtar kelimesinin değeri, fonksiyonun nasıl çağrıldığına bağlıdır. Başka bir deyişle, this‘in değeri bağlam tarafından belirlenir. Bu bağlam, fonksiyon çağrısı sırasında değişebilir. İşte en yaygın bağlamlar:
1. Global Bağlam:
Fonksiyon bir nesneye ait değilse ve global olarak çağrılırsa, this genellikle global nesneyi (tarayıcıda window) işaret eder. Ancak, “use strict” modu kullanıyorsanız, this undefined olur.
function myFunction() {
console.log(this); // Tarayıcıda window, strict modda undefined
}
myFunction();
2. Metot Bağlamı:
Bir fonksiyon, bir nesnenin metodu olarak tanımlanmışsa, this o nesneyi işaret eder. Bu, nesneye ait özelliklere ve metotlara erişim sağlar.
const myObject = {
name: "Fatih Soysal",
greet: function() {
console.log("Merhaba, adım " + this.name);
}
};
myObject.greet(); // Merhaba, adım Fatih Soysal
3. call(), apply() ve bind() Metotları:
Bu metotlar, this‘in değerini açıkça belirlememize olanak tanır. call() ve apply() fonksiyonu hemen çağırırken, bind() yeni bir fonksiyon döndürerek this‘i bağlar.
function greet(greeting) {
console.log(greeting + ", adım " + this.name);
}
const person = { name: "Ahmet" };
greet.call(person, "Selam"); // Selam, adım Ahmet
greet.apply(person, ["Merhaba"]); // Merhaba, adım Ahmet
const boundGreet = greet.bind({ name: "Ayşe" }, "Günaydın");
boundGreet(); // Günaydın, adım Ayşe
4. Oluşturucu Fonksiyonlar (Constructor Functions):
new anahtar kelimesiyle çağrılan fonksiyonlar, this anahtar kelimesi ile yeni bir nesne oluşturur. Bu yeni nesne, fonksiyonun içinde tanımlanan özelliklere sahip olur.
function Person(name) {
this.name = name;
}
const fatih = new Person("Fatih");
console.log(fatih.name); // Fatih
5. Ok Fonksiyonları (Arrow Functions):
Ok fonksiyonlarında this, çevredeki (lexical) bağlama bağlıdır. Kendi this bağlamları yoktur. Bu nedenle, ok fonksiyonlarını kullanırken this‘in beklenmedik davranışlar sergilemesine dikkat etmek önemlidir.
const myObject = {
name: "Fatih Soysal",
greet: function() {
setTimeout(() => { // Ok fonksiyonu kullanımı
console.log("Merhaba, adım " + this.name); // this, myObject'i işaret eder
}, 1000);
}
};
myObject.greet(); // Merhaba, adım Fatih Soysal (1 saniye sonra)
Sonuç
Umarım bu makale, JavaScript’teki this anahtar kelimesini daha iyi anlamanıza yardımcı olmuştur. this‘in davranışını anlamak, JavaScript ile daha etkili ve güvenilir kod yazmanız için önemlidir. Daha fazla bilgi için fatihsoysal.com sitesini ziyaret edebilirsiniz. Ayrıca, konuyla ilgili daha derinlemesine bilgi edinmek için bu kaynak faydalı olabilir.
Önemli Not: this‘in davranışı bazen beklenmedik sonuçlar doğurabilir. Bu nedenle, kodunuzu dikkatlice yazmalı ve this‘in her bağlamda nasıl davrandığını iyi anlamalısınız.
#Etiketler: JavaScript, this, anahtar kelime, bağlam, scope, prototip, prototip zincirleme, örnekler, rehber, programlama, web geliştirme