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.
Ř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