Sobes.tech
Junior

Jak zavolat metodu v řetězci volání?

sobes.tech AI

Odpověď od AI

Použijte tečku (.) mezi voláními metod nebo vlastnostmi objektu. Každé volání metody nebo přístup k vlastnosti vrací objekt, na kterém můžete následně zavolat další metodu nebo získat další vlastnost.

// Příklad řetězce volání metod
" abc ".trim().toUpperCase().split(" ");

/*  
   1. " abc ".trim()  -> "abc"  
   2. "abc".toUpperCase() -> "ABC"  
   3. "ABC".split(" ") -> ["ABC"]  
*/

// Příklad řetězce s přístupem k vlastnosti
const user = {
  address: {
    city: "Moskva"
  }
};

user.address.city; // "Moskva"

// Příklad s použitím volitelného řetězení (?.)
// Umožňuje bezpečný přístup k vlastnostem vnořených objektů,
// a předchází chybám, pokud je některá z mezilehlých vlastností null nebo undefined.
user.address?.street; // undefined, bez chyby

const anotherUser = {};
anotherUser.address?.city; // undefined, bez chyby

Při navrhování vlastních metod pro podporu řetězení by každá metoda měla vracet this (odkaz na aktuální objekt), s výjimkou poslední metody v řetězci, která může vracet finální výsledek.

class Builder {
  constructor() {
    this.value = "";
  }

  addText(text) {
    this.value += text;
    return this; // Vrací this
  }

  addNumber(number) {
    this.value += number;
    return this; // Vrací this
  }

  build() {
    return this.value; // Vrací finální výsledek
  }
}

const result = new Builder().addText("Hello").addNumber(123).build();
console.log(result); // "Hello123"