Derse geri dön

Zincirleme

önem: 2

merdiven objesi yukarı aşağı harekete izin vermektedir:

let merdiven = {
  adim: 0,
  yukari() {
    this.adim++;
  },
  asagi() {
    this.adim--;
  },
  adimiGoster: function() { // o anki adımı gösterir
    alert( this.adim );
  }
};

Eğer aşağıdaki gibi ard arda çağrı yapılırsa:

merdiven.yukari();
merdiven.yukari();
merdiven.asagi();
merdiven.adimiGoster(); // 1

yukari ve asagi metodlarını aşağıdaki gibi zincirleme yapılabilir hale getiriniz:

merdiven.yukari().yukari().asagi().adimiGoster(); // 1

Bu yaklaşım çoğu JavaScript kütüphanesinde yaygın olarak kullanılmaktadır.

Testler ile korunaklı olan aç.

Çözüm her metod çağrısı sonrası kendisini döndermektir.

let merdiven = {
  adim: 0,
  yukari() {
    this.adim++;
    return this;
  },
  asagi() {
    this.adim--;
    return this;
  },
  adimiGoster() {
    alert( this.adim );
    return this;
  }
}

merdiven.yukari().yukari().asagi().yukari().asagi().adimiGoster();//1

Ayrıca her satır için tek çağrı da yazılabilir. Uzun zincirleme fonksiyonlar için bu daha okunabilirdir.

merdiven
  .yukari()
  .yukari()
  .asagi()
  .up()
  .asagi()
  .adimiGoster(); // 1
let merdiven = {
  adim: 0,
  yukari: function () {
    this.adim++;
    return this;
  },
  asagi: function () {
    this.adim--;
    return this;
  },
  adimiGoster: function () {
    alert(this.adim);
  }
};

Çözümü testler korunaklı alanda olacak şekilde aç.