Junior
'this' anahtar kelimesi nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
this JavaScript'te, şu anda çalışan kodun bağlamında referans verilen nesneye işaret eden anahtar kelimedir. Değeri, fonksiyonun nasıl çağrıldığına göre belirlenir.
this'in tanımlanmasının temel yolları:
- Küresel bağlam: Bir fonksiyon dışında,
thisküresel nesneye (windowtarayıcıda,globalNode.js'te) işaret eder. - Normal fonksiyon çağrısı: Kısıtlamasız modda (
strict mode),thisyine küresel nesneye işaret eder (veya fonksiyon, bir nesnenin yöntemi olarak çağrılırsa ve bu nesnenullveyaundefinedise,undefinedolur). Kısıtlamalı modda,thisundefined'dır. - Nesne yöntemi: Eğer fonksiyon bir nesnenin yöntemi olarak çağrılırsa (yani nokta operatörü
.kullanılarak),thisyöntemi sahip olan nesneye işaret eder. - Yapıcı (Constructor):
newoperatörü kullanıldığında,thisyeni oluşturulan nesne örneğine işaret eder. call(),apply(),bind()metodları: Bu metodlar, fonksiyon çağrılırkenthisdeğerini açıkça ayarlamaya izin verir.bind()yeni bir fonksiyon döner vethisbağlanır,call()veapply()ise fonksiyonu belirtilenthisile çağırır.- Ok fonksiyonları (Arrow functions): Ok fonksiyonlarının kendi
this'i yoktur.thisbir ok fonksiyonunda, tanımlandığı çevresel bağlamdan lexikal olarak miras alınır.
Örnekler:
// Küresel bağlam
console.log(this === window); // true (tarayıcıda)
// Normal fonksiyon çağrısı
function myFunction() {
console.log(this);
}
myFunction(); // window (kısıtlamasız modda)
// Nesne yöntemi
const myObject = {
myMethod: function() {
console.log(this);
}
};
myObject.myMethod(); // myObject
// Yapıcı
function MyConstructor() {
this.value = 10;
console.log(this);
}
const instance = new MyConstructor(); // yeni nesne örneği
// call(), apply(), bind()
function greet(name) {
console.log("Hello, " + name + "! My name is " + this.name);
}
const person = { name: "Alice" };
greet.call(person, "Bob"); // Hello, Bob! My name is Alice
greet.apply(person, ["Bob"]); // Hello, Bob! My name is Alice
const boundGreet = greet.bind(person);
boundGreet("Bob"); // Hello, Bob! My name is Alice
// Ok fonksiyonu
const arrowFunction = () => {
console.log(this);
};
arrowFunction(); // window (küresel bağlamda tanımlandıysa)
Farklı bağlamlarda this'in nasıl belirlendiğini anlamak, doğru JavaScript kodu yazmak için kritiktir.