"this" in değerini açıklayın
Aşağıdaki amaç obj.selamVer() in 4 defa çağırılmasıdır.
Fakat (1) ve (2) , (3) ve (4) ten farklı çalışmaktadır. Neden?
let obj, metod;
obj = {
selamVer: function() { alert(this); }
};
obj.selamVer(); // (1) [object Object]
(obj.selamVer)(); // (2) [object Object]
(metod = obj.selamVer)(); // (3) undefined
(obj.selamVer || obj.yolcuEt)(); // (4) undefined
Açıklama:
-
Normal metod çağrısı yapılmaktadır.
-
Aynı şekilde çağrı yapılmaktadır. Tek fark parantez ve bu parantez sadece sıralama için kullanılmaktadır. Bir anlam ifade etmez.
-
Daha karmaşık bir çağrı,
(ifade).metod(). Eğer bu metod iki satıra ayrılırsa çalışır:f = obj.selamVer; // ifadeyi hesapla f(); // çağırBurada
f()fonksiyon olarakthisifadesi olmadan çalıştırılmıştır. -
Aynı şekilde
.nın sol tarafında bir ifade bulunmaktadır.
(3) ve (4) ün davranışını açıklamak için dönen referans tipini tekrar çalıştırmak gereklidir.
Metod çağrısı haricinde her işlem( atama = veya ||) bu fonksiyonu normal değere döndürür. Bundan dolayı da this’in tanımsız kalmasına yol açar.