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