"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ğır
Burada
f()
fonksiyon olarakthis
ifadesi 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.