this Deyimi ile Nesnenin Kendini Referans Etmesi

Nesnelerin metotlarını işlevsel hale getirmek için nesnenin kendini referans etmesi çok kıymetlidir. Önceki örneklerden dönüştürelim.

let ogrenci = {
    no:2301,
    isim:'Asya',
    sinif:7,
    kendiniTanit() {
        return `Ben ${this.isim}, numaram ${this.no}, sinifim ${this.sinif}`;
    }
};
alert( ogrenci.kendiniTanit() ); // Asya öğrencisinin bilgileri

let yeniOgrenci = Object.assign( {}, ogrenci );
yeniOgrenci.no = 1491;
yeniOgrenci.isim = 'Ali';
yeniOgrenci.sinif = 8;
alert( yeniOgrenci.kendiniTanit() ); // Ali öğrencisinin bilgileri

Nesnenin adı yerine this deyimi ile nesnenin kendisini referans ettik. Metotları haricen oluşturup nesneye değer olarak da atayabiliriz. Yukarıdaki metodu harici bir fonksiyon ile de dönüştürebiliriz. (Çok kullanışlı olmasa da).

function kendiniTanit (obj) {
    return `Ben ${obj.isim}, numaram ${obj.no}, sinifim ${obj.sinif}`;
}

let ogrenci = {
    no:2301,
    isim:'Asya',
    sinif:7,
    kendiniTanit:kendiniTanit(this)
    }
};
alert( ogrenci.kendiniTanit() );

Boş nesneleri fonksiyon olarak "anahtar:değer" ikilileri ile değer döndürerek oluşturmak daha kullanışlıdır. Bu da ES6 ile gelen bir yeniliktir. Örnek.

function isciOlustur (isim,gorev,maas) {
    return {
        isim, //isim:isim yazmaya gerek yok
        gorev, //gorev:gorevyazmaya gerek yok
        maas //maas:maas yazmaya gerek yok
    };
}

let birIsci = isciOlustur('Ahmet','Usta','10.000')
alert( birIsci.isim );
alert( birIsci.maas);

Bunu yapabilmemizi sağlayan olay JavaScript dilinde fonksiyonların bir nesne olarak tasarlanmış olmasıdır.

this deyimi sadece nesneleri referans etmez. Referans ettiği öğe, yürütülme esnasında . işaretinden önce olması gereken öğedir. this deyiminin sadece nesne ile sınırlı olmadığını bilmeniz gerekir. Şu örneklere bakınız.

//Sıkı mod
"use strict";
function isci() {
    return this;
}
alert( isci() ); // undefined
// Normal mod
function isci() {
  return this;
}
alert( isci() ); //[object Window] Pencere nesnesi
// Sıkı mod
"use strict";
let x = this;
alert(x); //[object Window]
alert(x.length) // 0 'Pencere nesnesinin uzunluğu'
alert(x.location) // bir adres 'Pencere nesnesinin adresi'

this deyimi, koşullu operatör veya ok fonksiyonlarıyla kullanılırsa this kaybolur, nesneyi referans edemez. Örnek.

//Koşullu operatörlerde
let nesne = {
    isim : 'Kaya',
    sifre : '1234',
    izinsiz: 'İzniniz yok!',
    sifreGoster: this.isim,
    sifreGizle: this.izinsiz,
};
alert( nesne.isim == 'Kaya' ? nesne.sifreGoster : nesne.sifreGizle); //undefined
//Ok Fonksiyonlarda
let nesne = {
    isim : 'Kaya',
    izinsiz: 'İzniniz yok!',
    kendiniTanit: let tanit = () => this.isim,
    kendiniGizle: let gizle = () => this.izinsiz,
};
alert( nesne.kendiniTanit() ); //undefined

this dile ait bir deyimdir (for, if ... gibi) referans ettiği öğeyi biz kontrol edemeyiz.

Last updated