Nesnelerde Fonksiyon Kullanımı ve Callback

Nesnelerdeki anahtarların değerleri anonim bir fonksiyon olabilir. Örnek.

let ogrenci = {
  no:2301,
  isim:'Asya',
  sinif:7,
  kendiniTanit:function () {
    return `Ben ${ogrenci.isim}, numaram ${ogrenci.no}, sinifim ${ogrenci.sinif}`;
  }
};
alert(ogrenci.kendiniTanit);

Fonksiyonu olduğu gibi string olarak gördük. O zaman bu fonksiyonu callback yapabiliriz. Hadi sonuna () koyarak deneyiniz.

alert( ogrenci.kendiniTanit() ); //callback

Değeri fonksiyon olan özelliklere "nesnenin metodu" diyoruz. Bu metotları da callback ile yürütebiliyoruz.

Nesnelerde değer olarak kullandığımız fonksiyonlar (yani nesnenin metodu) değer döndürmek zorunda değildir. Değersiz fonksiyonlar kullanarak 'yerinde' işlemler de yapabiliriz. Örnek.

let isci = {
    tcNo:12345678900,
    isim:'Güneş Gün',
    kidem:15,
    maas:12000,
    maasArtir: function () {
        let miktar = prompt("Yeni maaşı giriniz:",isci.maas);
        isci.maas = miktar;
    } // return kullanmadık (değersiz fonksiyon)
};

alert(isci.maas); // 120000
isci.maasArtir(); //callback
alert(isci.maas); // girdiğiniz miktar

ES6 ile gelen yeniliklerden biri de bir nesne içinde bir fonksiyon (metot) yazarken anahtar tanımlamaya ve function deyimi yazmaya gerek olmamasıdır. Yani örnek olarak.

let ogrenci = {
  no:2301,
  isim:'Asya',
  sinif:7,
  kendiniTanit() { // 'function' deyimi olmadan doğrudan yazdık.
    return `Ben ${ogrenci.isim}, numaram ${ogrenci.no}, sinifim ${ogrenci.sinif}`;
  }
};
alert( ogrenci.kendiniTanit() );

Bu kullanımda fonksiyon adı doğrudan özellik (anahtar) olur. Ayrıca function deyimi kullanmanıza da gerek kalmaz. Bu sebeple daha okunaklı ve kısadır.

Klon nesnelerin içindeki metotlar (fonksiyonlar), nesne isimleri değişeceği için (isci1, isci2 vb.) metotlar çalışmaz. Yani:

let ogrenci = {
  no:2301,
  isim:'Asya',
  sinif:7,
  kendiniTanit() {
    return `Ben ${ogrenci.isim}, numaram ${ogrenci.no}, sinifim ${ogrenci.sinif}`;
  }
};

let yeniOgrenci = Object.assign( {}, ogrenci );
yeniOgrenci.no = 1491;
yeniOgrenci.isim = 'Ali';
yeniOgrenci.sinif = 8;
alert( yeniOgrenci.kendiniTanit() ); // kopyalandığı öğrencinin bilgilerini verir

Dolayısıyla her nesnede aynı metodu nesne ismi ile yeniden yazmak gerekir mi?

Hayır. Bunu yapmak saçmadır. Bu problemi this deyimi ile çözeriz.

Last updated