A função como Objeto. Métodos call e apply - JavaScript
No JavaScript, a função também é um objeto: um objeto Function
Function
Por exemplo, podemos criar uma função usando o construtor Function
const square = new Function("n", "return n * n;");
console.log(square(5)); // 25
O construtor Function
n
Entre as propriedades do objeto Function
: um array de argumentos passados para a funçãoarguments
: define o número de argumentos que a função esperalength
: define a função que chamou a função atual em execuçãocaller
: o nome da funçãoname
: o protótipo da funçãoprototype
Usando o protótipo, podemos definir propriedades adicionais:
function sayHello() {
console.log("Hello");
}
// alterando o protótipo para todas as funções
Function.prototype.program ="Hello World";
console.log(sayHello.program); // Hello World
Entre os métodos, é importante mencionar os métodos call()
apply()
O método call()
this
function sum(x, y) {
return x + y;
}
const result = sum.call(this, 3, 8);
console.log(result); // 11
this
window
this
Ao passar um objeto através do primeiro parâmetro, podemos referenciá-lo através da palavra-chave this
function User (name, age) {
this.name = name;
this.age = age;
}
const tom = new User("Tom", 39);
function print() {
console.log("Name:", this.name);
}
print.call(tom); // Name: Tom
Neste caso, apenas um valor é passado, já que a função print não aceita parâmetros. Ou seja, a função será chamada para o objeto tom
Se não importa o objeto para o qual a função é chamada, então podemos passar o valor null
function sum(x, y) {
return x + y;
}
const result = sum.call(null, 3, 8);
console.log(result); // 11
O método apply
call
function sum(x, y) {
return x + y;
}
const result = sum.apply(null, [3, 8]);
console.log(result); // 11