Derse geri dön

Obje tanımında "this" kullanamak.

önem: 5

Aşağıda kullaniciOlustur obje döndermektedir.

ref'e ulaşıldığında ne döner? Neden?

function kullaniciOlustur() {
  return {
    isim: "İhsan",
    ref: this
  };
};

let kullanici = kullaniciOlustur();

alert( kullanici.ref.isim ); // Sonuç nedir?

Cevap: Hata.

Deneyin:

function kullaniciOlustur() {
  return {
    isim: "İhsan",
    ref: this
  };
};

let kullanici = kullaniciOlustur();

alert( kullanici.ref.isim ); // Error: Cannot read property 'name' of undefined

Çünkü this'i tanımlayan kurallar obje tanımına bakmaz.

Kodda kullaniciOlustur() içindeki this undefined'dır. Çünkü bu fonksiyon olarak çağırıldı metod olarak değil!.

Ve objet tanımının this'e doğrudan bir etkisi yoktur. this tüm fonksiyonu kapsar, kod bloğu veya obje tanımı bunu etkilemez.

Öyleyse, ref: this aslında fonksiyonun thsi değerini alır.

Şimdi tersi bir duruma bakalım:

function kullaniciOlustur() {
  return {
    isim: "İhsan",
    ref() {
      return this;
    }
  };
};

let kullanici = kullaniciOlustur();

alert( kullanici.ref().isim ); // İhsan

Şimdi çalışıyor çünkü kullanici.ref() metod oldu. this'in değeri de . dan öncesi olarak tanımlandı.