Bir fonksiyonda bağlam nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
JavaScript'teki bir fonksiyonda (this) bağlam, fonksiyonun nasıl çağrıldığına göre belirlenir, tanımlandığı yere değil. Bu, fonksiyonun ait olduğu veya çağıran nesneye işaret eder.
Bağlamı belirlemenin yolları:
-
Küresel bağlam: Fonksiyonlar dışında veya fonksiyon açık bir nesne olmadan çağrıldığında (
thistarayıcıdawindow, Node.js'deglobal, strict moddaundefinedolur).// Tarayıcıda console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Nesne bağlamı (metot): Eğer fonksiyon bir nesnenin metodu olarak çağrılırsa (
obj.method()), fonksiyon içindekithisbu nesneye referans olur.const user = { name: 'Alice', greet: function() { console.log(`Merhaba, benim adım ${this.name}`); } }; user.greet(); // Merhaba, benim adım Alice -
Yapıcı fonksiyon bağlamı: Bir fonksiyon
newanahtar kelimesiyle çağrıldığında (new MyClass()), yeni bir nesne oluşturulur ve yapıcı fonksiyon içindekithisbu yeni nesneye işaret eder.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Açık bağlam belirleme:
call,applyvebindmetodları, fonksiyon çağrısı sırasındathisdeğerini açıkça ayarlamaya izin verir.call(thisArg, arg1, arg2, ...): FonksiyonuthisthisArgile ve argümanlar ayrı ayrı verilerek çağırır.apply(thisArg, [argsArray]): FonksiyonuthisthisArgile ve argümanlar dizi olarak verilir.bind(thisArg, arg1, arg2, ...):thisdeğeri sabitlenmiş yeni bir fonksiyon döner.
function displayInfo(age) { console.log(`${this.name} ${age} yaşında.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie 30 yaşında. displayInfo.apply(person, [35]); // Charlie 35 yaşında. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie 40 yaşında. -
Ok fonksiyonları: Ok fonksiyonları kendi
this'lerine sahip değildir.this'i, tanımlandıkları ortamdan kalıtım yoluyla alırlar.const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Merhaba ok fonksiyonu, ${this.name}`); }; innerArrow(); // `this` burada anotherUser, sayHello'dan kalıtılmış }, sayHelloBad: () => { // nesne metodları için kötü uygulama console.log(`Merhaba ok fonksiyonu, ${this.name}`); } }; anotherUser.sayHello(); // Merhaba ok fonksiyonu, David // Tarayıcıda, strict mod dışında anotherUser.sayHelloBad(); // Merhaba ok fonksiyonu, undefined (`this` - window)
Bağlamı anlamak, JavaScript'te nesneler, metodlar ve olay işleyicileriyle doğru çalışmak için kritiktir.