Hoje vou falar um pouco sobre o Apply em JavaScript e mostrar um exemplo de como podemos utilizá-lo para calcular o menor e o maior valor em um conjunto de dados. Primeiramente vamos fazer um teste: criar uma função e se chamar a funTeste junto com o this, virá o contexto de onde a função está sendo executada.
function funTeste(at1, at2) {
console.log(this, at1, at2)
}
funTeste(1, 2)
Porém, ao invés defazer funTeste e executar, podemos fazer um apply, e dentro dele podemos fazer, por exemplo:
funTeste.apply(1, [2, 3])
O primeiro atributo do apply (um), é o que eu quero para o this, ou seja, em qual contexto eu quero que essa função seja executada, e o segundo atributo são os valores que eu quero dar para os parâmetros que a função espera.
Se executarmos novamente, o resultado virá: [Number: 1] 2 3, referente ao número 1, e o 2 e 3 referentes aos atributos 1 e 2.
Mais alguns testes seguindo essa ideia:
function funTeste(at1, at2) {
console.log(this, at1, at2)
}
console.log(Math.min(98, 78, 50))
Ao executar o número retornado, será 50, pois 50 é o menor valor daquele conjunto de dados.
O interessante no apply
Note que não estamos passando um vetor de valores e sim com vírgula, como se fossem vários atributos. Podemos utilizar o apply para que possamos passar um vetor onde tiver uma função que recebe uma lista de parâmetros.
Exemplo: Vamos passar um vetor em que quero descobrir o menor dos valores. A forma mais fácil é utilizando o apply.
function funTeste(at1, at2) {
console.log(this, at1, at2)
}
const vetor1 = [89, 70, 50, 48]
console.log(Math.min.apply(Math, vetor1))
O Math é o meu this, pois o que estiver dentro dele como contexto está ótimo.
Podemos fazer a mesma coisa com o valor máximo apenas trocando o min por max:
console.log(Math.max.apply(Math, vetor1))
Com o apply, podemos adaptar como vamos executar a função e também é uma forma de manipular em qual contexto essa função está sendo executada, assim como o bind. Ela é muito útil quando precisamos converter ou passar atributos para a função como vetor ao invés de individualmente.
Confira o vídeo:
Deixe seu comentário. Curta o
DevPleno no Facebook,
inscreva-se no canal e não se esqueça de cadastrar seu e-mail para não perder as novidades. Abraço!