JavaScript'te `this`'in yürütme bağlamı değeri neye bağlıdır?
sobes.tech yapay zeka
AI'dan gelen yanıt
JavaScript'te this değeri, fonksiyonun nasıl çağrıldığına bağlıdır. Temel senaryolar:
-
Küresel bağlam: Fonksiyonların dışında, katı modda (
'use strict')thisundefinedolur. Katı mod olmadan, bu global nesne olur (windowtarayıcıda,globalNode.js'te). -
Bir nesnenin metodunun çağrılması:
this, çağrılan metodun ait olduğu nesneye işaret eder.const obj = { prop: 'değer', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Normal fonksiyon çağrısı: Katı modda,
thisundefinedolur. Katı mod olmadan, bu global nesne olur.function myFunction() { // katı modda this === undefined // katı mod olmadan this === window (tarayıcıda) console.log(this); } myFunction(); -
Yapıcı (
new) kullanımı:newoperatörü ile bir yapıcı fonksiyon kullanıldığında, fonksiyon içindekithis, yeni oluşturulan nesneye işaret eder.function MyClass(name) { this.name = name; // this === yeni nesne } const instance = new MyClass('test'); // instance.name === 'test' -
Açık bağlama (
call,apply,bind):call,applyvebindmetodları, fonksiyonunthisdeğerini açıkça ayarlamaya izin verir.call(thisArg, arg1, arg2, ...): Fonksiyonu çağırır vethis'ithisArgyapar, argümanları ayrı ayrı geçirir.apply(thisArg, [argsArray]): Fonksiyonu çağırır vethis'ithisArgyapar, argümanları dizi olarak geçirir.bind(thisArg):this'i kalıcı olarak bağlayan yeni bir fonksiyon döner.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // 42 yazdırır -
Ok fonksiyonları (
=>): Ok fonksiyonlarının kendithis'i yoktur.thisdeğeri, tanımlandığı bağlamdan kalıtılır.const outerObj = { name: 'Outer', method: function() { const arrowFunc = () => { // this, outerObj'in method'u çağrıldığı bağlamdan kalıtılır console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // 'Outer' yazdırır const anotherArrowFunc = () => { // this, küresel bağlamdan kalıtılır (veya katı modda undefined) console.log(this); }; anotherArrowFunc(); -
DOM olay işleyicileri: Çoğu durumda, olay işleyicisindeki
this, olayın gerçekleştiği DOM elementine işaret eder.// Tarayıcıda örnek const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Bu mekaniklerin anlaşılması, JavaScript'te this'in doğru kullanımında kritik öneme sahiptir.