MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Suprascrierea funcțiilor

Funcțiile au capacitatea de a-și suprascrie comportamentul. Suprascrierea are loc prin asignarea unei funcții anonime unei variabile, care poartă același nume cu funcția ce va fi suprascrisă:

function print(){
   console.log("Bună dimineața");
   print = function(){
       console.log("Bună ziua");
   }
}

print(); // Bună dimineața
print(); // Bună ziua

La prima apelare a funcției, acționează blocul principal de instrucțiuni al funcției, în acest caz, se afișează mesajul "Bună dimineața". În același timp, la prima apelare a funcției print, ea este și suprascrisă. Prin urmare, la toate apelările ulterioare ale funcției, va fi utilizată versiunea suprascrisă, iar pe consolă se va afișa mesajul "Bună ziua".

Trebuie însă să se țină cont de anumite nuanțe la suprascrierea funcției. În special, să încercăm să atribuim o referință către funcție unei variabile și să apelăm funcția prin intermediul acelei variabile:

function print(){
   console.log("Bună dimineața");
   print = function(){
       console.log("Bună ziua");
   }
}
// atribuirea referinței către funcție înainte de suprascriere
const printMessage = print;
print(); // Bună dimineața
print(); // Bună ziua
printMessage(); // Bună dimineața
printMessage(); // Bună dimineața

Aici variabila printMessage primește o referință către funcția print înainte de suprascriere. Prin urmare, la apelarea printMessage(), va fi utilizată versiunea nesuprascrisă a funcției print.

Dar să presupunem că am definit variabila printMessage după apelul funcției print:

print(); // Bună dimineața
print(); // Bună ziua
const printMessage = print;
printMessage(); // Bună ziua
printMessage(); // Bună ziua

În acest caz, variabila printMessage va indica spre versiunea suprascrisă a funcției print.

← Lecția anterioară Lecția următoare →