Javascript

JavaScript: Apply

T
Por Tulio Faria 24 de maio de 2017
JavaScript: Apply

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!