zpět k lekci

Zřetězení

důležitost: 2

Máme objekt žebřík, který nám umožňuje chodit nahoru a dolů:

let žebřík = {
  stupeň: 0,
  nahoru() {
    this.stupeň++;
  },
  dolů() {
    this.stupeň--;
  },
  zobrazStupeň: function() { // zobrazí aktuální stupeň
    alert( this.stupeň );
  }
};

Když nyní potřebujeme učinit několik volání po sobě, můžeme to udělat takto:

žebřík.nahoru();
žebřík.nahoru();
žebřík.dolů();
žebřík.zobrazStupeň(); // 1
žebřík.dolů();
žebřík.zobrazStupeň(); // 0

Upravte kód funkcí nahoru, dolů a zobrazStupeň tak, aby bylo možné volání zřetězit takto:

žebřík.nahoru().nahoru().dolů().zobrazStupeň().dolů().zobrazStupeň(); // zobrazí 1, pak 0

Takový přístup se zeširoka používá v JavaScriptových knihovnách.

Otevřít pískoviště s testy.

Řešením je v každém volání vrátit tento objekt samotný.

let žebřík = {
  stupeň: 0,
  nahoru() {
    this.stupeň++;
    return this;
  },
  dolů() {
    this.stupeň--;
    return this;
  },
  zobrazStupeň() {
    alert( this.stupeň );
    return this;
  }
};

žebřík.nahoru().nahoru().dolů().zobrazStupeň().dolů().zobrazStupeň(); // zobrazí 1, pak 0

Můžeme také psát každé volání na nový řádek. U delšího zřetězení je to čitelnější:

žebřík
  .nahoru()
  .nahoru()
  .dolů()
  .zobrazStupeň() // 1
  .dolů()
  .zobrazStupeň(); // 0

Otevřít řešení s testy na pískovišti.