# Nesnelerde Fonksiyon Kullanımı ve Callback

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

{% code lineNumbers="true" %}

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

{% endcode %}

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

{% code lineNumbers="true" %}

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

{% endcode %}

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

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.

{% code lineNumbers="true" %}

```javascript
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
```

{% endcode %}

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.

{% code lineNumbers="true" %}

```javascript
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() );
```

{% endcode %}

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:

{% code lineNumbers="true" %}

```javascript
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
```

{% endcode %}

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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hanuce.gitbook.io/javascript-egitimi/referans-reference-veri-tipleri/object-nesne/nesnelerde-fonksiyon-kullanimi-ve-callback.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
