Sobrescrevendo Comportamentos de Funções em JavaScript
As funções têm a capacidade de sobrescrever seus comportamentos. Isso pode ser feito atribuindo uma função anônima a uma variável com o mesmo nome da função a ser sobrescrita:
function print() {
console.log("Bom dia");
print = function () {
console.log("Boa tarde");
};
}
print(); // Bom dia
print(); // Boa tarde
No primeiro acionamento da função, ela executa o bloco principal de operações, neste caso, exibindo a mensagem "Bom dia". Neste primeiro acionamento, a função print
também é sobrescrita. Assim, em todos os acionamentos seguintes, será executada a versão sobrescrita, que exibirá "Boa tarde".
No entanto, é importante ter em mente alguns detalhes ao sobrescrever funções. Por exemplo, vamos atribuir uma referência à função a uma variável e, através dessa variável, chamá-la:
function print() {
console.log("Bom dia");
print = function () {
console.log("Boa tarde");
};
}
// Atribuindo referência à função antes de ser sobrescrita
const printMessage = print;
print(); // Bom dia
print(); // Boa tarde
printMessage(); // Bom dia
printMessage(); // Bom dia
Neste exemplo, a variável printMessage
recebe uma referência à função print antes de ser sobrescrita. Portanto, ao chamarmos printMessage()
, é executada a versão não sobrescrita da função print
.
Por outro lado, se atribuirmos a variável printMessage
após a sobrescrita da função print
:
print(); // Bom dia
print(); // Boa tarde
const printMessage = print;
printMessage(); // Boa tarde
printMessage(); // Boa tarde